├── .gitignore ├── .maciasl ├── ACPIDebug.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── ACPIDebug ├── ACPIDebug-Info.plist ├── ACPIDebug-Prefix.pch ├── ACPIDebug.cpp └── ACPIDebug.h ├── License.md ├── README ├── debug.txt ├── debug_extern.txt ├── en.lproj └── InfoPlist.strings ├── instrument.sh ├── instrument_LID.txt ├── instrument_Lxx.txt ├── instrument_Qxx.txt ├── instrument_WAK_PTS.txt ├── makefile ├── print_version.sh └── remove.txt /.gitignore: -------------------------------------------------------------------------------- 1 | Build 2 | DerivedData 3 | ACPIDebug.xcodeproj/project.xcworkspace/xcuserdata 4 | ACPIDebug.xcodeproj/xcuserdata 5 | -------------------------------------------------------------------------------- /.maciasl: -------------------------------------------------------------------------------- 1 | Add DSDT Debug Methods debug.txt 2 | Add SSDT Debug Extern Declarations debug_extern.txt 3 | Instrument _WAK/_PTS instrument_WAK_PTS.txt 4 | Instrument EC Queries instrument_Qxx.txt 5 | Instrument GPE Events instrument_Lxx.txt 6 | Instrument LID0._LID instrument_LID.txt 7 | Remove RMDT debugging code remove.txt 8 | -------------------------------------------------------------------------------- /ACPIDebug.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 849921901600F4FC00CCDF3B /* ACPIDebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8499218E1600F4FC00CCDF3B /* ACPIDebug.cpp */; }; 11 | 849921911600F4FC00CCDF3B /* ACPIDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 8499218F1600F4FC00CCDF3B /* ACPIDebug.h */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 0C4B237E14598AD20080D960 /* ACPIDebug.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ACPIDebug.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 16 | 0C4B238214598AD20080D960 /* Kernel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kernel.framework; path = System/Library/Frameworks/Kernel.framework; sourceTree = SDKROOT; }; 17 | 0C4B238514598AD20080D960 /* ACPIDebug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ACPIDebug-Info.plist"; sourceTree = ""; }; 18 | 0C4B238714598AD20080D960 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 19 | 0C4B238D14598AD20080D960 /* ACPIDebug-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "ACPIDebug-Prefix.pch"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 20 | 844778DD16E7FD2100B27895 /* makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; lineEnding = 0; path = makefile; sourceTree = SOURCE_ROOT; usesTabs = 1; }; 21 | 846754971829A75D004F3392 /* debug_extern.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = debug_extern.txt; sourceTree = ""; }; 22 | 848A3B5D195BD6DF00FEC26D /* remove.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = remove.txt; sourceTree = ""; }; 23 | 849702071950863E005C5A0C /* instrument_LID.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = instrument_LID.txt; sourceTree = ""; }; 24 | 8499218E1600F4FC00CCDF3B /* ACPIDebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = ACPIDebug.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 25 | 8499218F1600F4FC00CCDF3B /* ACPIDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = ACPIDebug.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 26 | 84C56F48180DEF1400775290 /* debug.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = debug.txt; sourceTree = ""; }; 27 | 84C56F4A180DEF3100775290 /* License.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.md; sourceTree = ""; }; 28 | 84C56F4B180DEF3100775290 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 29 | 84C56F4E180DF04900775290 /* .maciasl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .maciasl; sourceTree = ""; usesTabs = 1; }; 30 | 84FFE84419210C0A00A1976E /* instrument_WAK_PTS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = instrument_WAK_PTS.txt; sourceTree = ""; }; 31 | 84FFE84619210C7F00A1976E /* instrument_Qxx.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = instrument_Qxx.txt; sourceTree = ""; }; 32 | 84FFE84819210C8B00A1976E /* instrument_Lxx.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = instrument_Lxx.txt; sourceTree = ""; }; 33 | 84FFE84A19210CE000A1976E /* instrument.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = instrument.sh; sourceTree = ""; }; 34 | /* End PBXFileReference section */ 35 | 36 | /* Begin PBXFrameworksBuildPhase section */ 37 | 0C4B237914598AD20080D960 /* Frameworks */ = { 38 | isa = PBXFrameworksBuildPhase; 39 | buildActionMask = 2147483647; 40 | files = ( 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | /* End PBXFrameworksBuildPhase section */ 45 | 46 | /* Begin PBXGroup section */ 47 | 0C4B237114598AD10080D960 = { 48 | isa = PBXGroup; 49 | children = ( 50 | 844778DD16E7FD2100B27895 /* makefile */, 51 | 84C56F4A180DEF3100775290 /* License.md */, 52 | 84C56F4B180DEF3100775290 /* README */, 53 | 840D2E84180DF09D004F6FB9 /* DSDT */, 54 | 0C4B238314598AD20080D960 /* ACPIDebug */, 55 | 0C4B238014598AD20080D960 /* Frameworks */, 56 | 0C4B237F14598AD20080D960 /* Products */, 57 | ); 58 | sourceTree = ""; 59 | }; 60 | 0C4B237F14598AD20080D960 /* Products */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 0C4B237E14598AD20080D960 /* ACPIDebug.kext */, 64 | ); 65 | name = Products; 66 | sourceTree = ""; 67 | }; 68 | 0C4B238014598AD20080D960 /* Frameworks */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 0C4B238114598AD20080D960 /* Other Frameworks */, 72 | ); 73 | name = Frameworks; 74 | sourceTree = ""; 75 | }; 76 | 0C4B238114598AD20080D960 /* Other Frameworks */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 0C4B238214598AD20080D960 /* Kernel.framework */, 80 | ); 81 | name = "Other Frameworks"; 82 | sourceTree = ""; 83 | }; 84 | 0C4B238314598AD20080D960 /* ACPIDebug */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 8499218F1600F4FC00CCDF3B /* ACPIDebug.h */, 88 | 8499218E1600F4FC00CCDF3B /* ACPIDebug.cpp */, 89 | 0C4B238414598AD20080D960 /* Supporting Files */, 90 | ); 91 | path = ACPIDebug; 92 | sourceTree = ""; 93 | }; 94 | 0C4B238414598AD20080D960 /* Supporting Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 0C4B238514598AD20080D960 /* ACPIDebug-Info.plist */, 98 | 0C4B238614598AD20080D960 /* InfoPlist.strings */, 99 | 0C4B238D14598AD20080D960 /* ACPIDebug-Prefix.pch */, 100 | ); 101 | name = "Supporting Files"; 102 | sourceTree = ""; 103 | }; 104 | 840D2E84180DF09D004F6FB9 /* DSDT */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 84FFE84A19210CE000A1976E /* instrument.sh */, 108 | 84C56F4E180DF04900775290 /* .maciasl */, 109 | 84C56F48180DEF1400775290 /* debug.txt */, 110 | 846754971829A75D004F3392 /* debug_extern.txt */, 111 | 84FFE84419210C0A00A1976E /* instrument_WAK_PTS.txt */, 112 | 84FFE84619210C7F00A1976E /* instrument_Qxx.txt */, 113 | 84FFE84819210C8B00A1976E /* instrument_Lxx.txt */, 114 | 849702071950863E005C5A0C /* instrument_LID.txt */, 115 | 848A3B5D195BD6DF00FEC26D /* remove.txt */, 116 | ); 117 | name = DSDT; 118 | sourceTree = ""; 119 | }; 120 | /* End PBXGroup section */ 121 | 122 | /* Begin PBXHeadersBuildPhase section */ 123 | 0C4B237A14598AD20080D960 /* Headers */ = { 124 | isa = PBXHeadersBuildPhase; 125 | buildActionMask = 2147483647; 126 | files = ( 127 | 849921911600F4FC00CCDF3B /* ACPIDebug.h in Headers */, 128 | ); 129 | runOnlyForDeploymentPostprocessing = 0; 130 | }; 131 | /* End PBXHeadersBuildPhase section */ 132 | 133 | /* Begin PBXNativeTarget section */ 134 | 0C4B237D14598AD20080D960 /* ACPIDebug */ = { 135 | isa = PBXNativeTarget; 136 | buildConfigurationList = 0C4B239014598AD20080D960 /* Build configuration list for PBXNativeTarget "ACPIDebug" */; 137 | buildPhases = ( 138 | 0C4B237814598AD20080D960 /* Sources */, 139 | 0C4B237914598AD20080D960 /* Frameworks */, 140 | 0C4B237A14598AD20080D960 /* Headers */, 141 | 0C4B237B14598AD20080D960 /* Resources */, 142 | 0C4B237C14598AD20080D960 /* Rez */, 143 | ); 144 | buildRules = ( 145 | ); 146 | dependencies = ( 147 | ); 148 | name = ACPIDebug; 149 | productName = ACPIDebug; 150 | productReference = 0C4B237E14598AD20080D960 /* ACPIDebug.kext */; 151 | productType = "com.apple.product-type.kernel-extension"; 152 | }; 153 | /* End PBXNativeTarget section */ 154 | 155 | /* Begin PBXProject section */ 156 | 0C4B237314598AD10080D960 /* Project object */ = { 157 | isa = PBXProject; 158 | attributes = { 159 | LastUpgradeCheck = 0510; 160 | TargetAttributes = { 161 | 0C4B237D14598AD20080D960 = { 162 | DevelopmentTeam = 3U537Y3635; 163 | }; 164 | }; 165 | }; 166 | buildConfigurationList = 0C4B237614598AD10080D960 /* Build configuration list for PBXProject "ACPIDebug" */; 167 | compatibilityVersion = "Xcode 3.2"; 168 | developmentRegion = English; 169 | hasScannedForEncodings = 0; 170 | knownRegions = ( 171 | en, 172 | ); 173 | mainGroup = 0C4B237114598AD10080D960; 174 | productRefGroup = 0C4B237F14598AD20080D960 /* Products */; 175 | projectDirPath = ""; 176 | projectRoot = ""; 177 | targets = ( 178 | 0C4B237D14598AD20080D960 /* ACPIDebug */, 179 | ); 180 | }; 181 | /* End PBXProject section */ 182 | 183 | /* Begin PBXResourcesBuildPhase section */ 184 | 0C4B237B14598AD20080D960 /* Resources */ = { 185 | isa = PBXResourcesBuildPhase; 186 | buildActionMask = 2147483647; 187 | files = ( 188 | ); 189 | runOnlyForDeploymentPostprocessing = 0; 190 | }; 191 | /* End PBXResourcesBuildPhase section */ 192 | 193 | /* Begin PBXRezBuildPhase section */ 194 | 0C4B237C14598AD20080D960 /* Rez */ = { 195 | isa = PBXRezBuildPhase; 196 | buildActionMask = 2147483647; 197 | files = ( 198 | ); 199 | runOnlyForDeploymentPostprocessing = 0; 200 | }; 201 | /* End PBXRezBuildPhase section */ 202 | 203 | /* Begin PBXSourcesBuildPhase section */ 204 | 0C4B237814598AD20080D960 /* Sources */ = { 205 | isa = PBXSourcesBuildPhase; 206 | buildActionMask = 2147483647; 207 | files = ( 208 | 849921901600F4FC00CCDF3B /* ACPIDebug.cpp in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 0C4B238614598AD20080D960 /* InfoPlist.strings */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 0C4B238714598AD20080D960 /* en */, 219 | ); 220 | name = InfoPlist.strings; 221 | path = ..; 222 | sourceTree = ""; 223 | }; 224 | /* End PBXVariantGroup section */ 225 | 226 | /* Begin XCBuildConfiguration section */ 227 | 0C4B238E14598AD20080D960 /* Debug */ = { 228 | isa = XCBuildConfiguration; 229 | buildSettings = { 230 | ALWAYS_SEARCH_USER_PATHS = NO; 231 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 232 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 233 | DEPLOYMENT_POSTPROCESSING = YES; 234 | GCC_INLINES_ARE_PRIVATE_EXTERN = YES; 235 | GCC_PREPROCESSOR_DEFINITIONS = ( 236 | "DEBUG=1", 237 | "DEBUG_MSG=1", 238 | "LOGNAME=\\\"${LOGNAME}\\\"", 239 | "$(inherited)", 240 | ); 241 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 242 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 243 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 244 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 245 | GCC_WARN_UNUSED_VARIABLE = YES; 246 | LLVM_LTO = NO; 247 | "LLVM_LTO[arch=x86_64]" = YES; 248 | MACOSX_DEPLOYMENT_TARGET = 10.6; 249 | OTHER_CFLAGS = "-fno-stack-protector"; 250 | "OTHER_LDFLAGS[arch=x86_64]" = "-dead_strip"; 251 | SDKROOT = macosx10.8; 252 | STRIP_STYLE = "non-global"; 253 | SYMROOT = build/Products; 254 | }; 255 | name = Debug; 256 | }; 257 | 0C4B238F14598AD20080D960 /* Release */ = { 258 | isa = XCBuildConfiguration; 259 | buildSettings = { 260 | ALWAYS_SEARCH_USER_PATHS = NO; 261 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 262 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 263 | DEPLOYMENT_POSTPROCESSING = YES; 264 | GCC_INLINES_ARE_PRIVATE_EXTERN = YES; 265 | GCC_PREPROCESSOR_DEFINITIONS = ( 266 | "LOGNAME=\\\"${LOGNAME}\\\"", 267 | "$(inherited)", 268 | ); 269 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 270 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 271 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 272 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 273 | GCC_WARN_UNUSED_VARIABLE = YES; 274 | LLVM_LTO = NO; 275 | "LLVM_LTO[arch=x86_64]" = YES; 276 | MACOSX_DEPLOYMENT_TARGET = 10.6; 277 | OTHER_CFLAGS = "-fno-stack-protector"; 278 | "OTHER_LDFLAGS[arch=x86_64]" = "-dead_strip"; 279 | SDKROOT = macosx10.8; 280 | STRIP_STYLE = "non-global"; 281 | SYMROOT = build/Products; 282 | }; 283 | name = Release; 284 | }; 285 | 0C4B239114598AD20080D960 /* Debug */ = { 286 | isa = XCBuildConfiguration; 287 | buildSettings = { 288 | COMBINE_HIDPI_IMAGES = YES; 289 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 290 | GCC_PREFIX_HEADER = "ACPIDebug/ACPIDebug-Prefix.pch"; 291 | INFOPLIST_FILE = "ACPIDebug/ACPIDebug-Info.plist"; 292 | MODULE_NAME = com.rehabman.driver.ACPIDebug; 293 | MODULE_VERSION = 0.1.4; 294 | PRODUCT_NAME = ACPIDebug; 295 | PROVISIONING_PROFILE = ""; 296 | STRIP_INSTALLED_PRODUCT = YES; 297 | }; 298 | name = Debug; 299 | }; 300 | 0C4B239214598AD20080D960 /* Release */ = { 301 | isa = XCBuildConfiguration; 302 | buildSettings = { 303 | COMBINE_HIDPI_IMAGES = YES; 304 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 305 | GCC_PREFIX_HEADER = "ACPIDebug/ACPIDebug-Prefix.pch"; 306 | INFOPLIST_FILE = "ACPIDebug/ACPIDebug-Info.plist"; 307 | MODULE_NAME = com.rehabman.driver.ACPIDebug; 308 | MODULE_VERSION = 0.1.4; 309 | PRODUCT_NAME = ACPIDebug; 310 | PROVISIONING_PROFILE = ""; 311 | STRIP_INSTALLED_PRODUCT = YES; 312 | }; 313 | name = Release; 314 | }; 315 | /* End XCBuildConfiguration section */ 316 | 317 | /* Begin XCConfigurationList section */ 318 | 0C4B237614598AD10080D960 /* Build configuration list for PBXProject "ACPIDebug" */ = { 319 | isa = XCConfigurationList; 320 | buildConfigurations = ( 321 | 0C4B238E14598AD20080D960 /* Debug */, 322 | 0C4B238F14598AD20080D960 /* Release */, 323 | ); 324 | defaultConfigurationIsVisible = 0; 325 | defaultConfigurationName = Release; 326 | }; 327 | 0C4B239014598AD20080D960 /* Build configuration list for PBXNativeTarget "ACPIDebug" */ = { 328 | isa = XCConfigurationList; 329 | buildConfigurations = ( 330 | 0C4B239114598AD20080D960 /* Debug */, 331 | 0C4B239214598AD20080D960 /* Release */, 332 | ); 333 | defaultConfigurationIsVisible = 0; 334 | defaultConfigurationName = Release; 335 | }; 336 | /* End XCConfigurationList section */ 337 | }; 338 | rootObject = 0C4B237314598AD10080D960 /* Project object */; 339 | } 340 | -------------------------------------------------------------------------------- /ACPIDebug.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ACPIDebug/ACPIDebug-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Source Code 6 | https://github.com/RehabMan/OS-X-ACPI-Debug 7 | CFBundleGetInfoString 8 | ${MODULE_VERSION}, Copyright © 2013 RehabMan. All rights reserved. 9 | CFBundleDevelopmentRegion 10 | English 11 | CFBundleExecutable 12 | ${EXECUTABLE_NAME} 13 | CFBundleIdentifier 14 | ${MODULE_NAME} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | KEXT 21 | CFBundleShortVersionString 22 | ${MODULE_VERSION} 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | ${MODULE_VERSION} 27 | IOKitPersonalities 28 | 29 | ACPI Debug 30 | 31 | CFBundleIdentifier 32 | ${MODULE_NAME} 33 | IOClass 34 | org_rehabman_ACPIDebug 35 | IONameMatch 36 | RMD0000 37 | IOProviderClass 38 | IOACPIPlatformDevice 39 | PollingInterval 40 | 100 41 | dbg0 42 | 0 43 | dbg1 44 | 0 45 | dbg2 46 | 0 47 | dbg3 48 | 0 49 | dbg4 50 | 0 51 | dbg5 52 | 0 53 | dbg6 54 | 0 55 | dbg7 56 | 0 57 | dbg8 58 | 0 59 | dbg9 60 | 0 61 | 62 | 63 | NSHumanReadableCopyright 64 | Copyright © 2013 RehabMan. All rights reserved. 65 | OSBundleLibraries 66 | 67 | com.apple.iokit.IOACPIFamily 68 | 1.0d1 69 | com.apple.kpi.iokit 70 | 9.0.0 71 | com.apple.kpi.libkern 72 | 9.0.0 73 | 74 | OSBundleRequired 75 | Root 76 | 77 | 78 | -------------------------------------------------------------------------------- /ACPIDebug/ACPIDebug-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'ACPIDebug' target in the 'ACPIDebug' project 3 | // 4 | 5 | -------------------------------------------------------------------------------- /ACPIDebug/ACPIDebug.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2013 RehabMan. All rights reserved. 3 | * 4 | * Released under "The GNU General Public License (GPL-2.0)" 5 | * 6 | * This program is free software; you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by the 8 | * Free Software Foundation; either version 2 of the License, or (at your 9 | * option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 | * 20 | */ 21 | 22 | #include 23 | #include 24 | #include "ACPIDebug.h" 25 | 26 | //REVIEW: avoids problem with Xcode 5.1.0 where -dead_strip eliminates these required symbols 27 | #include 28 | void* _org_rehabman_dontstrip_[] = 29 | { 30 | (void*)&OSKextGetCurrentIdentifier, 31 | (void*)&OSKextGetCurrentLoadTag, 32 | (void*)&OSKextGetCurrentVersionString, 33 | }; 34 | 35 | OSDefineMetaClassAndStructors(org_rehabman_ACPIDebug, IOService) 36 | 37 | /****************************************************************************** 38 | * ACPIDebug::init 39 | ******************************************************************************/ 40 | bool ACPIDebug::init(OSDictionary *dict) 41 | { 42 | DEBUG_LOG("ACPIDebug::init: Initializing\n"); 43 | 44 | bool result = super::init(dict); 45 | m_pDevice = NULL; 46 | m_pWorkLoop = NULL; 47 | m_pTimer = NULL; 48 | m_pCmdGate = NULL; 49 | m_pLock = NULL; 50 | 51 | m_nPollingInterval = 100; 52 | if (OSNumber* num = OSDynamicCast(OSNumber, dict->getObject("PollingInterval"))) 53 | { 54 | m_nPollingInterval = (int)num->unsigned32BitValue(); 55 | //setProperty("PollingInterval", _wakedelay, 32); 56 | } 57 | 58 | return result; 59 | } 60 | 61 | /****************************************************************************** 62 | * ACPIDebug::probe 63 | ******************************************************************************/ 64 | IOService *ACPIDebug::probe(IOService *provider, SInt32 *score) 65 | { 66 | DEBUG_LOG("ACPIDebug::probe: Probing\n"); 67 | 68 | IOService *result = super::probe(provider, score); 69 | IOACPIPlatformDevice* pDevice = OSDynamicCast(IOACPIPlatformDevice, provider); 70 | 71 | // check for proper DSDT methods 72 | if (kIOReturnSuccess != pDevice->validateObject("COUN") || 73 | kIOReturnSuccess != pDevice->validateObject("FTCH")) 74 | { 75 | DEBUG_LOG("ACPIDebug::probe: DSDT methods COUN or FTCH not available\n"); 76 | return NULL; 77 | } 78 | 79 | return result; 80 | } 81 | 82 | /****************************************************************************** 83 | * ACPIDebug::start 84 | ******************************************************************************/ 85 | bool ACPIDebug::start(IOService *provider) 86 | { 87 | DEBUG_LOG("ACPIDebug::start: called\n"); 88 | 89 | // announce version 90 | extern kmod_info_t kmod_info; 91 | IOLog("ACPIDebug: Version %s starting on OS X Darwin %d.%d.\n", kmod_info.version, version_major, version_minor); 92 | 93 | // place version/build info in ioreg properties RM,Build and RM,Version 94 | char buf[128]; 95 | snprintf(buf, sizeof(buf), "%s %s", kmod_info.name, kmod_info.version); 96 | setProperty("RM,Version", buf); 97 | #ifdef DEBUG 98 | setProperty("RM,Build", "Debug-" LOGNAME); 99 | #else 100 | setProperty("RM,Build", "Release-" LOGNAME); 101 | #endif 102 | 103 | m_pDevice = OSDynamicCast(IOACPIPlatformDevice, provider); 104 | if (NULL == m_pDevice || !super::start(provider)) 105 | return false; 106 | 107 | m_pLock = IOLockAlloc(); 108 | if (!m_pLock) 109 | return false; 110 | 111 | // need a work loop to send timer events to 112 | m_pWorkLoop = getWorkLoop(); 113 | if (NULL == m_pWorkLoop) 114 | return false; 115 | m_pWorkLoop->retain(); 116 | 117 | // need a timer to kick off every second 118 | m_pTimer = IOTimerEventSource::timerEventSource(this, 119 | OSMemberFunctionCast(IOTimerEventSource::Action, this, &ACPIDebug::OnTimerEvent)); 120 | if (NULL == m_pTimer) 121 | return false; 122 | if (kIOReturnSuccess != m_pWorkLoop->addEventSource(m_pTimer)) 123 | return false; 124 | 125 | // command gate to route setProperties through workloop 126 | m_pCmdGate = IOCommandGate::commandGate(this); 127 | if (m_pCmdGate) 128 | m_pWorkLoop->addEventSource(m_pCmdGate); 129 | 130 | // call it once 131 | OnTimerEvent(); 132 | 133 | this->registerService(0); 134 | return true; 135 | } 136 | 137 | /****************************************************************************** 138 | * ACPIDebug::message (handling Notify) 139 | ******************************************************************************/ 140 | IOReturn ACPIDebug::message(UInt32 type, IOService * provider, void * argument) 141 | { 142 | if (type == kIOACPIMessageDeviceNotification) 143 | { 144 | DEBUG_LOG("ACPIDebug::message(%d, %p, %p)\n", type, provider, argument); 145 | PrintTraces(); 146 | } 147 | return super::message(type, provider, argument); 148 | } 149 | 150 | /****************************************************************************** 151 | * ACPIDebug::PrintTraces 152 | ******************************************************************************/ 153 | void ACPIDebug::PrintTraces() 154 | { 155 | IOLockLock(m_pLock); 156 | 157 | for (;;) 158 | { 159 | // see if there are any trace items in the RING 160 | UInt32 count = 0; 161 | if (kIOReturnSuccess != m_pDevice->evaluateInteger("COUN", &count)) 162 | { 163 | IOLog("ACPIDebug: evaluateObject of COUN method failed\n"); 164 | break; 165 | 166 | } 167 | if (!count) 168 | break; 169 | 170 | // gather the next item from RING and print it 171 | OSObject* debug; 172 | if (kIOReturnSuccess == m_pDevice->evaluateObject("FTCH", &debug) && 173 | NULL != debug) 174 | { 175 | static char buf[2048]; 176 | // got a valid object, format and print it... 177 | FormatDebugString(debug, buf, sizeof(buf)/sizeof(buf[0])); 178 | IOLog("ACPIDebug: %s\n", buf); 179 | debug->release(); 180 | } 181 | } 182 | 183 | IOLockUnlock(m_pLock); 184 | } 185 | 186 | /****************************************************************************** 187 | * ACPIDebug::OnTimerEvent 188 | ******************************************************************************/ 189 | IOReturn ACPIDebug::OnTimerEvent() 190 | { 191 | //REVIEW: timer may now be unecessary 192 | PrintTraces(); 193 | 194 | if (NULL != m_pTimer) 195 | { 196 | m_pTimer->cancelTimeout(); 197 | m_pTimer->setTimeoutMS(m_nPollingInterval); 198 | } 199 | 200 | return kIOReturnSuccess; 201 | } 202 | 203 | /****************************************************************************** 204 | * FormatDebugString 205 | ******************************************************************************/ 206 | size_t ACPIDebug::FormatDebugString(OSObject* debug, char* buf, size_t buf_size) 207 | { 208 | // determine type of object 209 | // for integer: just print the value 210 | // for string: print string in quotes 211 | // for array: print comma separated contents { } 212 | // for buffer: print comma separated bytes { } 213 | //REVIEW: are there other types? 214 | //REVIEW: how to allow formatting? 215 | 216 | size_t left = buf_size; 217 | int n; 218 | if (OSNumber* num = OSDynamicCast(OSNumber, debug)) 219 | { 220 | n = snprintf(buf, left, "0x%llx", num->unsigned64BitValue()); 221 | left -= n; buf += n; 222 | } 223 | else if (OSString* str = OSDynamicCast(OSString, debug)) 224 | { 225 | n = snprintf(buf, left, "\"%s\"", str->getCStringNoCopy()); 226 | left -= n; buf += n; 227 | } 228 | else if (OSData* data = OSDynamicCast(OSData, debug)) 229 | { 230 | n = snprintf(buf, buf_size, "{ "); 231 | left -= n; buf += n; 232 | int count = data->getLength(); 233 | const uint8_t* p = static_cast(data->getBytesNoCopy()); 234 | for (int i = 0; i < count; i++) 235 | { 236 | n = snprintf(buf, left, "%02x ", p[i]); 237 | left -= n; buf += n; 238 | } 239 | n = snprintf(buf, left, "}"); 240 | left -= n; buf += n; 241 | } 242 | else if (OSArray* arr = OSDynamicCast(OSArray, debug)) 243 | { 244 | n = snprintf(buf, buf_size, "{ "); 245 | left -= n; buf += n; 246 | int count = arr->getCount(); 247 | for (int i = 0; i < count; i++) 248 | { 249 | size_t n = FormatDebugString(arr->getObject(i), buf, left); 250 | left -= n; buf += n; 251 | n = snprintf(buf, left, ", "); 252 | left -= n; buf += n; 253 | } 254 | n = snprintf(buf, left, "}"); 255 | left -= n; buf += n; 256 | } 257 | else 258 | { 259 | size_t n = snprintf(buf, buf_size, "!!unknown type!!"); 260 | left -= n; buf += n; 261 | } 262 | 263 | return buf_size - left; 264 | } 265 | 266 | /****************************************************************************** 267 | * ACPIDebug::stop 268 | ******************************************************************************/ 269 | void ACPIDebug::stop(IOService *provider) 270 | { 271 | DEBUG_LOG("ACPIDebug::stop: called\n"); 272 | 273 | if (NULL != m_pTimer) 274 | { 275 | m_pTimer->cancelTimeout(); 276 | m_pWorkLoop->removeEventSource(m_pTimer); 277 | m_pTimer->release(); 278 | m_pTimer = NULL; 279 | } 280 | if (NULL != m_pCmdGate) 281 | { 282 | m_pWorkLoop->removeEventSource(m_pCmdGate); 283 | m_pCmdGate->release(); 284 | m_pCmdGate = NULL; 285 | } 286 | 287 | if (NULL != m_pWorkLoop) 288 | { 289 | m_pWorkLoop->release(); 290 | m_pWorkLoop = NULL; 291 | } 292 | if (NULL != m_pLock) 293 | { 294 | IOLockFree(m_pLock); 295 | m_pLock = NULL; 296 | } 297 | 298 | super::stop(provider); 299 | } 300 | 301 | /****************************************************************************** 302 | * ACPIDebug::setProperties 303 | ******************************************************************************/ 304 | IOReturn ACPIDebug::setProperties(OSObject* props) 305 | { 306 | if (m_pCmdGate) 307 | { 308 | // syncronize through workloop... 309 | IOReturn result = m_pCmdGate->runAction(OSMemberFunctionCast(IOCommandGate::Action, this, &ACPIDebug::setPropertiesGated), props); 310 | if (kIOReturnSuccess != result) 311 | return result; 312 | } 313 | return kIOReturnSuccess; 314 | } 315 | 316 | /****************************************************************************** 317 | * ACPIDebug::setPropertiesGated 318 | ******************************************************************************/ 319 | IOReturn ACPIDebug::setPropertiesGated(OSObject* props) 320 | { 321 | OSDictionary* dict = OSDynamicCast(OSDictionary, props); 322 | if (!dict) 323 | return kIOReturnSuccess; 324 | 325 | for (int i = 0; i < 10; i++) 326 | { 327 | const char kTriggerFormat[] = "dbg%d"; 328 | const char kTargetFormat[] = "DBG%d"; 329 | char buf[16]; 330 | snprintf(buf, sizeof(buf), kTriggerFormat, i); 331 | if (OSNumber* num = OSDynamicCast(OSNumber, dict->getObject(buf))) 332 | { 333 | snprintf(buf, sizeof(buf), kTargetFormat, i); 334 | IOReturn result = m_pDevice->evaluateObject(buf, NULL, (OSObject**)&num, 1); 335 | if (kIOReturnSuccess != result) 336 | { 337 | IOLog("ACPIDebug evaluateObject(\"%s\") failed (%x)\n", buf, result); 338 | } 339 | //num->release(); 340 | } 341 | } 342 | 343 | return kIOReturnSuccess; 344 | } 345 | 346 | -------------------------------------------------------------------------------- /ACPIDebug/ACPIDebug.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2012 RehabMan. All rights reserved. 3 | * 4 | * Released under "The GNU General Public License (GPL-2.0)" 5 | * 6 | * This program is free software; you can redistribute it and/or modify it 7 | * under the terms of the GNU General Public License as published by the 8 | * Free Software Foundation; either version 2 of the License, or (at your 9 | * option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 13 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License along 17 | * with this program; if not, write to the Free Software Foundation, Inc., 18 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 | * 20 | */ 21 | 22 | #ifndef __ACPIDebug__ 23 | #define __ACPIDebug__ 24 | 25 | #define ACPIDebug org_rehabman_ACPIDebug 26 | 27 | #include 28 | #include 29 | #include 30 | 31 | #ifndef EXPORT 32 | #define EXPORT __attribute__((visibility("default"))) 33 | #endif 34 | 35 | #ifdef DEBUG_MSG 36 | #define DEBUG_LOG(args...) IOLog(args) 37 | #else 38 | #define DEBUG_LOG(args...) 39 | #endif 40 | 41 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 42 | 43 | class EXPORT ACPIDebug : public IOService 44 | { 45 | typedef IOService super; 46 | OSDeclareDefaultStructors(org_rehabman_ACPIDebug) 47 | 48 | public: 49 | virtual bool init(OSDictionary *dictionary = 0); 50 | virtual IOService *probe(IOService *provider, SInt32 *score); 51 | virtual bool start(IOService *provider); 52 | virtual void stop(IOService *provider); 53 | virtual IOReturn message( UInt32 type, IOService * provider, void * argument); 54 | virtual IOReturn setProperties(OSObject* props); 55 | 56 | private: 57 | IOACPIPlatformDevice* m_pDevice; 58 | IOWorkLoop* m_pWorkLoop; 59 | IOTimerEventSource* m_pTimer; 60 | int m_nPollingInterval; 61 | IOCommandGate* m_pCmdGate; 62 | IOLock* m_pLock; 63 | 64 | IOReturn OnTimerEvent(void); 65 | void PrintTraces(void); 66 | static size_t FormatDebugString(OSObject* debug, char* buf, size_t buf_size); 67 | IOReturn setPropertiesGated(OSObject* props); 68 | }; 69 | 70 | #endif // __ACPIDebug__ -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | ## The GNU General Public License (GPL-2.0) 2 | ## Version 2, June 1991 3 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 4 | 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 5 | 6 | Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. 7 | 8 | ### Preamble 9 | 10 | The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. 11 | 12 | When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. 13 | 14 | To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. 15 | 16 | For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. 17 | 18 | We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. 19 | 20 | Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. 21 | 22 | Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. 23 | The precise terms and conditions for copying, distribution and modification follow. 24 | 25 | ### TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 26 | 27 | 0\. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". 28 | 29 | Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 30 | 31 | 1\. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. 32 | 33 | You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 34 | 35 | 2\. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: 36 | 37 | a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. 38 | 39 | b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. 40 | 41 | c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) 42 | 43 | These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. 44 | 45 | Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. 46 | 47 | In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 48 | 49 | 3\. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: 50 | 51 | a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 52 | 53 | b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 54 | 55 | c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) 56 | 57 | The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. 58 | 59 | If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 60 | 61 | 4\. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 62 | 63 | 5\. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 64 | 65 | 6\. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 66 | 67 | 7\. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. 68 | 69 | If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. 70 | 71 | It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. 72 | 73 | This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 74 | 75 | 8\. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 76 | 77 | 9\. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. 78 | 79 | Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 80 | 81 | 10\. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. 82 | 83 | ### NO WARRANTY 84 | 11\. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 85 | 86 | 12\. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 87 | END OF TERMS AND CONDITIONS 88 | 89 | ### How to Apply These Terms to Your New Programs 90 | 91 | If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. 92 | 93 | To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. 94 | 95 | One line to give the program's name and a brief idea of what it does. 96 | 97 | 
Copyright (C) 98 | 99 | This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 100 | 101 | This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 102 | 103 | You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 104 | Also add information on how to contact you by electronic and paper mail. 105 | If the program is interactive, make it output a short notice like this when it starts in an interactive mode: 106 | 107 | Gnomovision version 69, Copyright (C) year name of author 108 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type \`show w'. This is free software, and you are welcome to redistribute it under certain conditions; type \`show c' for details. 109 | 110 | The hypothetical commands \`show w' and \`show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than \`show w' and \`show c'; they could even be mouse-clicks or menu items--whatever suits your program. 111 | 112 | You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: 113 | 114 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. 115 | 116 | signature of Ty Coon, 1 April 1989
Ty Coon, President of Vice 117 | 118 | This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. 119 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Written by RehabMan 2013-10-15 2 | 3 | Advanced Configuration and Power Interface (ACPI) based kernel extension for debugging DSDT code. This kext allows one to easily trace variables and execution path from DSDT (or SSDT) code. 4 | 5 | Installation: 6 | 7 | To use it you must install the two components that make up the software. First of all, you must patch your DSDT to add the RMDT (RehabMan Debug Trace) device. The presence of this device allows the kext to load. Apply the debug.txt patch via MaciASL. You can also add this repo as a MaciASL "source" in MaciASL preferences: http://raw.github.com/RehabMan/OS-X-ACPI-Debug/master. 8 | 9 | Second, you must install the kext (ACPIDebug.kext). You can build it at the command line with 'make' and install it with Kext Wizard (or your favorite kext installer), or you can install it at the command line with 'make install'. Of course, you can also build it with Xcode. I'm using Xcode 5.0 at the moment. You can also use my pre-built kext downloaded from bitbucket. Links are provided below. 10 | 11 | Third, add code to your DSDT to where you wish to cause trace messages to system.log (call \RMDT.PUSH). 12 | 13 | 14 | Change Log: 15 | 16 | 2015-05-07 17 | 18 | - fix minor thread sync bug that would cause a spurious 0x0 to be output 19 | 20 | 21 | 2013-01-17 22 | 23 | - added ability to force calls into DBGx methods in RMDT device via 'ioio' utility 24 | 25 | 26 | 2013-10-15 27 | 28 | - initial release 29 | 30 | 31 | Downloads and more information: 32 | 33 | 34 | Downloads are available on Bitbucket: https://bitbucket.org/RehabMan/os-x-acpi-debug/downloads/ 35 | 36 | 37 | Please see this thread on tonymacx86.com: http://www.tonymacx86.com/dsdt/111868-dsdt-debugging-tracing-system-log.html 38 | 39 | -or- 40 | 41 | http://www.insanelymac.com/forum/topic/292800-dsdt-debuggingtracing-to-systemlog/ 42 | 43 | 44 | 45 | Using the tracing facility: 46 | 47 | The DSDT patch adds the RMDT device at the root of your DSDT. There are several methods you can use from within the DSDT to "push" debug output to the kext: 48 | 49 | PUSH: Takes a single parameter (of any type, including Packages and Buffers). The contents of this parameter will be displayed by the kext to system.log. 50 | 51 | P1, P2 through P7. P1 does exactly the same as PUSH. Each of these utility methods takes 1 to 7 parameters (according to the name of the method). This makes it easy to provide descriptions for your data or have multiple variables displayed on one line in system.log. 52 | 53 | The other methods COUN, and FTCH are part of the implementation. These methods are called by ACPIDebug.kext to pull information. 54 | 55 | 56 | Examples: 57 | 58 | \RMDT.PUSH("Entering _WAK") 59 | output: ACPIDebug: "Entering _WAK" 60 | 61 | \RMDT.PUSH(Local0) 62 | example output: ACPIDebug: 0x10 63 | 64 | \RMDT.P2("Local0", Local0) 65 | example output: ACPIDebug: { "Local0", 0x10, } 66 | 67 | \RMDT.P4("OSFL() returns", OSFL(), "OSVR is", OSVR) 68 | example output: ACPIDebug: { "OSFL() returns", 0xABC, "OSVR is", 0x60, } 69 | 70 | Name(TEST, Buffer() { 128, 255, 10, 127 } 71 | \RMDT.P1(TEST) 72 | example output: ACPIDebug: { 0x80, 0xFF, 0x0A, 0x7F, } 73 | 74 | Name(TEST, Package() { Package() { 128, 255 }, Package() { 1, 2, 3, 10 }) 75 | example output: ACPIDebug: { { 0x80, 0xFF }, { 0x1, 0x2, 0x3, 0xA }, } 76 | 77 | 78 | How it works: 79 | 80 | Internally the RMDT device maintains a ring buffer of objects added via PUSH (ring buffer uses a Package). The ring buffer size is 256. The ACPIDebug.kext polls the RMDT device (via FTCH) every 100ms to see if any objects are available for printing. If they are they are pulled from the ring buffer and output to system.log (it is a FIFO ring). Objects added to the ring buffer when it is full are ignored. 81 | 82 | 83 | Forcing calls into RMDT from Terminal: 84 | 85 | With the latest changes you can also force calls into methods in RMDT by using ioio. For ioio, see: https://github.com/RehabMan/OS-X-ioio 86 | 87 | The mapping of properties to methods is as follows: 88 | 89 | dbg0 -> DBG0 90 | dbg1 -> DBG1 91 | ... 92 | dbg9 -> DBG9 93 | 94 | The methods will take one parameter (which is the value that the property was set to). The return value of the method is ignored. 95 | 96 | So, in the RMDT device, you can add a method as such: 97 | 98 | Method(DBG0, 1, Serialized) 99 | { 100 | \RMDT.P2("DBG0 Arg0=", Arg0) 101 | If (LEqual(Arg0, 5)) 102 | { 103 | \RMDT.P1("You set dbg0 to 5") 104 | } 105 | Else 106 | { 107 | \RMDT.P1("You set dbg0 to something other than 5") 108 | } 109 | } 110 | 111 | You could, of course, output any other DSDT data you wanted to in that method. 112 | 113 | In order to trigger the method, set the 'dbg0' property with ioio: 114 | 115 | # in Terminal 116 | ioio -s org_rehabman_ACPIDebug dbg0 5 117 | 118 | -------------------------------------------------------------------------------- /debug.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #debug.txt 3 | 4 | # 5 | # Facility for writing trace output to system.log 6 | # 7 | # Use in conjunction with ACPIDebug.kext 8 | # 9 | # EXPERIMENTAL 10 | # 11 | # Written by RehabMan 2013-10-15 12 | # 13 | 14 | into device label RMDT remove_entry; 15 | into definitionblock code_regex . insert 16 | begin 17 | Device (RMDT)\n 18 | {\n 19 | Name (_HID, "RMD0000")\n 20 | Name (RING, Package(256) { })\n 21 | Mutex (RTMX, 0)\n 22 | Name (HEAD, 0)\n 23 | Name (TAIL, 0)\n 24 | // PUSH: Use to push a trace item into RING for ACPIDebug.kext\n 25 | Method (PUSH, 1, NotSerialized)\n 26 | {\n 27 | Acquire(RTMX, 0xFFFF)\n 28 | // push new item at HEAD\n 29 | Add(HEAD, 1, Local0)\n 30 | If (LGreaterEqual(Local0, SizeOf(RING))) { Store(0, Local0) }\n 31 | if (LNotEqual(Local0, TAIL))\n 32 | {\n 33 | Store(Arg0, Index(RING, HEAD))\n 34 | Store(Local0, HEAD)\n 35 | }\n 36 | Release(RTMX)\n 37 | Notify(RMDT, 0x80)\n 38 | }\n 39 | // FTCH: Used by ACPIDebug.kext to fetch an item from RING\n 40 | Method (FTCH, 0, NotSerialized)\n 41 | {\n 42 | Acquire(RTMX, 0xFFFF)\n 43 | // pull item from TAIL and return it\n 44 | Store(0, Local0)\n 45 | if (LNotEqual(HEAD, TAIL))\n 46 | {\n 47 | Store(DerefOf(Index(RING, TAIL)), Local0)\n 48 | Increment(TAIL)\n 49 | If (LGreaterEqual(TAIL, SizeOf(RING))) { Store(0, TAIL) }\n 50 | }\n 51 | Release(RTMX)\n 52 | Return(Local0)\n 53 | }\n 54 | // COUN: Used by ACPIDebug.kext to determine number of items in RING\n 55 | Method (COUN, 0, NotSerialized)\n 56 | {\n 57 | Acquire(RTMX, 0xFFFF)\n 58 | // return count of items in RING\n 59 | Subtract(HEAD, TAIL, Local0)\n 60 | if (LLess(Local0, 0)) { Add(Local0, SizeOf(RING), Local0) }\n 61 | Release(RTMX)\n 62 | Return(Local0)\n 63 | }\n 64 | // Helper functions for multiple params at one time\n 65 | Method (P1, 1, NotSerialized) { PUSH(Arg0) }\n 66 | Method (P2, 2, Serialized)\n 67 | {\n 68 | Name (TEMP, Package(2) { })\n 69 | Store(Arg0, Index(TEMP, 0))\n 70 | Store(Arg1, Index(TEMP, 1))\n 71 | PUSH(TEMP)\n 72 | }\n 73 | Method (P3, 3, Serialized)\n 74 | {\n 75 | Name (TEMP, Package(3) { })\n 76 | Store(Arg0, Index(TEMP, 0))\n 77 | Store(Arg1, Index(TEMP, 1))\n 78 | Store(Arg2, Index(TEMP, 2))\n 79 | PUSH(TEMP)\n 80 | }\n 81 | Method (P4, 4, Serialized)\n 82 | {\n 83 | Name (TEMP, Package(4) { })\n 84 | Store(Arg0, Index(TEMP, 0))\n 85 | Store(Arg1, Index(TEMP, 1))\n 86 | Store(Arg2, Index(TEMP, 2))\n 87 | Store(Arg3, Index(TEMP, 3))\n 88 | PUSH(TEMP)\n 89 | }\n 90 | Method (P5, 5, Serialized)\n 91 | {\n 92 | Name (TEMP, Package(5) { })\n 93 | Store(Arg0, Index(TEMP, 0))\n 94 | Store(Arg1, Index(TEMP, 1))\n 95 | Store(Arg2, Index(TEMP, 2))\n 96 | Store(Arg3, Index(TEMP, 3))\n 97 | Store(Arg4, Index(TEMP, 4))\n 98 | PUSH(TEMP)\n 99 | }\n 100 | Method (P6, 6, Serialized)\n 101 | {\n 102 | Name (TEMP, Package(6) { })\n 103 | Store(Arg0, Index(TEMP, 0))\n 104 | Store(Arg1, Index(TEMP, 1))\n 105 | Store(Arg2, Index(TEMP, 2))\n 106 | Store(Arg3, Index(TEMP, 3))\n 107 | Store(Arg4, Index(TEMP, 4))\n 108 | Store(Arg5, Index(TEMP, 5))\n 109 | PUSH(TEMP)\n 110 | }\n 111 | Method (P7, 7, Serialized)\n 112 | {\n 113 | Name (TEMP, Package(7) { })\n 114 | Store(Arg0, Index(TEMP, 0))\n 115 | Store(Arg1, Index(TEMP, 1))\n 116 | Store(Arg2, Index(TEMP, 2))\n 117 | Store(Arg3, Index(TEMP, 3))\n 118 | Store(Arg4, Index(TEMP, 4))\n 119 | Store(Arg5, Index(TEMP, 5))\n 120 | Store(Arg6, Index(TEMP, 6))\n 121 | PUSH(TEMP)\n 122 | }\n 123 | }\n 124 | end; 125 | -------------------------------------------------------------------------------- /debug_extern.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #debug_extern.txt 3 | 4 | # 5 | # External declarations for debugging in SSDTs 6 | # 7 | # Use in conjunction with ACPIDebug.kext 8 | # 9 | # EXPERIMENTAL 10 | # 11 | # Written by RehabMan 2013-11-05 12 | # 13 | 14 | into definitionblock code_regex . insert 15 | begin 16 | External (RMDT, DeviceObj)\n 17 | External (RMDT.PUSH, MethodObj)\n 18 | External (RMDT.P1, MethodObj)\n 19 | External (RMDT.P2, MethodObj)\n 20 | External (RMDT.P3, MethodObj)\n 21 | External (RMDT.P4, MethodObj)\n 22 | External (RMDT.P5, MethodObj)\n 23 | External (RMDT.P6, MethodObj)\n 24 | External (RMDT.P7, MethodObj)\n 25 | end; -------------------------------------------------------------------------------- /en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /instrument.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # generate instrumentation patches 4 | 5 | printf "#Maintained by: RehabMan for: ACPIDebug\n" >instrument_Qxx.txt 6 | printf "#instrument_Qxx.txt\n\n" >>instrument_Qxx.txt 7 | printf "# generated by instrument.sh\n\n" >>instrument_Qxx.txt 8 | for i in {0..255}; do 9 | printf "into method label _Q%02X code_regex ([\s\S]*) replace_matched\n" $i >>instrument_Qxx.txt 10 | printf "begin\n" >>instrument_Qxx.txt 11 | printf '\\\\rmdt.p1(\"EC _Q%02X enter\")' $i >>instrument_Qxx.txt; echo '\\n' >>instrument_Qxx.txt 12 | printf "%%1">>instrument_Qxx.txt; echo '\\n' >>instrument_Qxx.txt 13 | printf '\\\\rmdt.p1(\"EC _Q%02X exit\")' $i >>instrument_Qxx.txt; echo '\\n' >>instrument_Qxx.txt 14 | printf "end;\n\n" >>instrument_Qxx.txt 15 | done 16 | 17 | printf "#Maintained by: RehabMan for: ACPIDebug\n" >instrument_Lxx.txt 18 | printf "#instrument_Lxx.txt\n\n" >>instrument_Lxx.txt 19 | printf "# generated by instrument.sh\n\n">>instrument_Lxx.txt 20 | for i in {0..255}; do 21 | printf "into method label _L%02X code_regex ([\s\S]*) replace_matched\n" $i >>instrument_Lxx.txt 22 | printf "begin\n" >>instrument_Lxx.txt 23 | printf '\\\\rmdt.p1(\"GPE _L%02X enter\")' $i >>instrument_Lxx.txt; echo '\\n' >>instrument_Lxx.txt 24 | printf "%%1" >>instrument_Lxx.txt; echo '\\n' >>instrument_Lxx.txt 25 | printf '\\\\rmdt.p1(\"GPE _L%02X exit\")' $i >>instrument_Lxx.txt; echo '\\n' >>instrument_Lxx.txt 26 | printf "end;\n\n" >>instrument_Lxx.txt 27 | done 28 | 29 | -------------------------------------------------------------------------------- /instrument_LID.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #instrument_LID.txt 3 | 4 | # Use this patch to determine if _LID is being called and what it is 5 | # returning. 6 | # 7 | # Used for debugging lid triggered sleep. 8 | 9 | into method label _LID parent_label LID0 set_label begin LIDX end; 10 | into device label LID0 code_regex . insert 11 | begin 12 | Method (_LID, 0, NotSerialized)\n 13 | {\n 14 | \rmdt.p1("LID0._LID enter")\n 15 | Store(LIDX(), Local0)\n 16 | \rmdt.p2("LID0._LID returning", Local0)\n 17 | Return(Local0)\n 18 | }\n 19 | end; 20 | -------------------------------------------------------------------------------- /instrument_Lxx.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #instrument_Lxx.txt 3 | 4 | # generated by instrument.sh 5 | 6 | into method label _L00 code_regex ([\s\S]*) replace_matched 7 | begin 8 | \\rmdt.p1("GPE _L00 enter")\n 9 | %1\n 10 | \\rmdt.p1("GPE _L00 exit")\n 11 | end; 12 | 13 | into method label _L01 code_regex ([\s\S]*) replace_matched 14 | begin 15 | \\rmdt.p1("GPE _L01 enter")\n 16 | %1\n 17 | \\rmdt.p1("GPE _L01 exit")\n 18 | end; 19 | 20 | into method label _L02 code_regex ([\s\S]*) replace_matched 21 | begin 22 | \\rmdt.p1("GPE _L02 enter")\n 23 | %1\n 24 | \\rmdt.p1("GPE _L02 exit")\n 25 | end; 26 | 27 | into method label _L03 code_regex ([\s\S]*) replace_matched 28 | begin 29 | \\rmdt.p1("GPE _L03 enter")\n 30 | %1\n 31 | \\rmdt.p1("GPE _L03 exit")\n 32 | end; 33 | 34 | into method label _L04 code_regex ([\s\S]*) replace_matched 35 | begin 36 | \\rmdt.p1("GPE _L04 enter")\n 37 | %1\n 38 | \\rmdt.p1("GPE _L04 exit")\n 39 | end; 40 | 41 | into method label _L05 code_regex ([\s\S]*) replace_matched 42 | begin 43 | \\rmdt.p1("GPE _L05 enter")\n 44 | %1\n 45 | \\rmdt.p1("GPE _L05 exit")\n 46 | end; 47 | 48 | into method label _L06 code_regex ([\s\S]*) replace_matched 49 | begin 50 | \\rmdt.p1("GPE _L06 enter")\n 51 | %1\n 52 | \\rmdt.p1("GPE _L06 exit")\n 53 | end; 54 | 55 | into method label _L07 code_regex ([\s\S]*) replace_matched 56 | begin 57 | \\rmdt.p1("GPE _L07 enter")\n 58 | %1\n 59 | \\rmdt.p1("GPE _L07 exit")\n 60 | end; 61 | 62 | into method label _L08 code_regex ([\s\S]*) replace_matched 63 | begin 64 | \\rmdt.p1("GPE _L08 enter")\n 65 | %1\n 66 | \\rmdt.p1("GPE _L08 exit")\n 67 | end; 68 | 69 | into method label _L09 code_regex ([\s\S]*) replace_matched 70 | begin 71 | \\rmdt.p1("GPE _L09 enter")\n 72 | %1\n 73 | \\rmdt.p1("GPE _L09 exit")\n 74 | end; 75 | 76 | into method label _L0A code_regex ([\s\S]*) replace_matched 77 | begin 78 | \\rmdt.p1("GPE _L0A enter")\n 79 | %1\n 80 | \\rmdt.p1("GPE _L0A exit")\n 81 | end; 82 | 83 | into method label _L0B code_regex ([\s\S]*) replace_matched 84 | begin 85 | \\rmdt.p1("GPE _L0B enter")\n 86 | %1\n 87 | \\rmdt.p1("GPE _L0B exit")\n 88 | end; 89 | 90 | into method label _L0C code_regex ([\s\S]*) replace_matched 91 | begin 92 | \\rmdt.p1("GPE _L0C enter")\n 93 | %1\n 94 | \\rmdt.p1("GPE _L0C exit")\n 95 | end; 96 | 97 | into method label _L0D code_regex ([\s\S]*) replace_matched 98 | begin 99 | \\rmdt.p1("GPE _L0D enter")\n 100 | %1\n 101 | \\rmdt.p1("GPE _L0D exit")\n 102 | end; 103 | 104 | into method label _L0E code_regex ([\s\S]*) replace_matched 105 | begin 106 | \\rmdt.p1("GPE _L0E enter")\n 107 | %1\n 108 | \\rmdt.p1("GPE _L0E exit")\n 109 | end; 110 | 111 | into method label _L0F code_regex ([\s\S]*) replace_matched 112 | begin 113 | \\rmdt.p1("GPE _L0F enter")\n 114 | %1\n 115 | \\rmdt.p1("GPE _L0F exit")\n 116 | end; 117 | 118 | into method label _L10 code_regex ([\s\S]*) replace_matched 119 | begin 120 | \\rmdt.p1("GPE _L10 enter")\n 121 | %1\n 122 | \\rmdt.p1("GPE _L10 exit")\n 123 | end; 124 | 125 | into method label _L11 code_regex ([\s\S]*) replace_matched 126 | begin 127 | \\rmdt.p1("GPE _L11 enter")\n 128 | %1\n 129 | \\rmdt.p1("GPE _L11 exit")\n 130 | end; 131 | 132 | into method label _L12 code_regex ([\s\S]*) replace_matched 133 | begin 134 | \\rmdt.p1("GPE _L12 enter")\n 135 | %1\n 136 | \\rmdt.p1("GPE _L12 exit")\n 137 | end; 138 | 139 | into method label _L13 code_regex ([\s\S]*) replace_matched 140 | begin 141 | \\rmdt.p1("GPE _L13 enter")\n 142 | %1\n 143 | \\rmdt.p1("GPE _L13 exit")\n 144 | end; 145 | 146 | into method label _L14 code_regex ([\s\S]*) replace_matched 147 | begin 148 | \\rmdt.p1("GPE _L14 enter")\n 149 | %1\n 150 | \\rmdt.p1("GPE _L14 exit")\n 151 | end; 152 | 153 | into method label _L15 code_regex ([\s\S]*) replace_matched 154 | begin 155 | \\rmdt.p1("GPE _L15 enter")\n 156 | %1\n 157 | \\rmdt.p1("GPE _L15 exit")\n 158 | end; 159 | 160 | into method label _L16 code_regex ([\s\S]*) replace_matched 161 | begin 162 | \\rmdt.p1("GPE _L16 enter")\n 163 | %1\n 164 | \\rmdt.p1("GPE _L16 exit")\n 165 | end; 166 | 167 | into method label _L17 code_regex ([\s\S]*) replace_matched 168 | begin 169 | \\rmdt.p1("GPE _L17 enter")\n 170 | %1\n 171 | \\rmdt.p1("GPE _L17 exit")\n 172 | end; 173 | 174 | into method label _L18 code_regex ([\s\S]*) replace_matched 175 | begin 176 | \\rmdt.p1("GPE _L18 enter")\n 177 | %1\n 178 | \\rmdt.p1("GPE _L18 exit")\n 179 | end; 180 | 181 | into method label _L19 code_regex ([\s\S]*) replace_matched 182 | begin 183 | \\rmdt.p1("GPE _L19 enter")\n 184 | %1\n 185 | \\rmdt.p1("GPE _L19 exit")\n 186 | end; 187 | 188 | into method label _L1A code_regex ([\s\S]*) replace_matched 189 | begin 190 | \\rmdt.p1("GPE _L1A enter")\n 191 | %1\n 192 | \\rmdt.p1("GPE _L1A exit")\n 193 | end; 194 | 195 | into method label _L1B code_regex ([\s\S]*) replace_matched 196 | begin 197 | \\rmdt.p1("GPE _L1B enter")\n 198 | %1\n 199 | \\rmdt.p1("GPE _L1B exit")\n 200 | end; 201 | 202 | into method label _L1C code_regex ([\s\S]*) replace_matched 203 | begin 204 | \\rmdt.p1("GPE _L1C enter")\n 205 | %1\n 206 | \\rmdt.p1("GPE _L1C exit")\n 207 | end; 208 | 209 | into method label _L1D code_regex ([\s\S]*) replace_matched 210 | begin 211 | \\rmdt.p1("GPE _L1D enter")\n 212 | %1\n 213 | \\rmdt.p1("GPE _L1D exit")\n 214 | end; 215 | 216 | into method label _L1E code_regex ([\s\S]*) replace_matched 217 | begin 218 | \\rmdt.p1("GPE _L1E enter")\n 219 | %1\n 220 | \\rmdt.p1("GPE _L1E exit")\n 221 | end; 222 | 223 | into method label _L1F code_regex ([\s\S]*) replace_matched 224 | begin 225 | \\rmdt.p1("GPE _L1F enter")\n 226 | %1\n 227 | \\rmdt.p1("GPE _L1F exit")\n 228 | end; 229 | 230 | into method label _L20 code_regex ([\s\S]*) replace_matched 231 | begin 232 | \\rmdt.p1("GPE _L20 enter")\n 233 | %1\n 234 | \\rmdt.p1("GPE _L20 exit")\n 235 | end; 236 | 237 | into method label _L21 code_regex ([\s\S]*) replace_matched 238 | begin 239 | \\rmdt.p1("GPE _L21 enter")\n 240 | %1\n 241 | \\rmdt.p1("GPE _L21 exit")\n 242 | end; 243 | 244 | into method label _L22 code_regex ([\s\S]*) replace_matched 245 | begin 246 | \\rmdt.p1("GPE _L22 enter")\n 247 | %1\n 248 | \\rmdt.p1("GPE _L22 exit")\n 249 | end; 250 | 251 | into method label _L23 code_regex ([\s\S]*) replace_matched 252 | begin 253 | \\rmdt.p1("GPE _L23 enter")\n 254 | %1\n 255 | \\rmdt.p1("GPE _L23 exit")\n 256 | end; 257 | 258 | into method label _L24 code_regex ([\s\S]*) replace_matched 259 | begin 260 | \\rmdt.p1("GPE _L24 enter")\n 261 | %1\n 262 | \\rmdt.p1("GPE _L24 exit")\n 263 | end; 264 | 265 | into method label _L25 code_regex ([\s\S]*) replace_matched 266 | begin 267 | \\rmdt.p1("GPE _L25 enter")\n 268 | %1\n 269 | \\rmdt.p1("GPE _L25 exit")\n 270 | end; 271 | 272 | into method label _L26 code_regex ([\s\S]*) replace_matched 273 | begin 274 | \\rmdt.p1("GPE _L26 enter")\n 275 | %1\n 276 | \\rmdt.p1("GPE _L26 exit")\n 277 | end; 278 | 279 | into method label _L27 code_regex ([\s\S]*) replace_matched 280 | begin 281 | \\rmdt.p1("GPE _L27 enter")\n 282 | %1\n 283 | \\rmdt.p1("GPE _L27 exit")\n 284 | end; 285 | 286 | into method label _L28 code_regex ([\s\S]*) replace_matched 287 | begin 288 | \\rmdt.p1("GPE _L28 enter")\n 289 | %1\n 290 | \\rmdt.p1("GPE _L28 exit")\n 291 | end; 292 | 293 | into method label _L29 code_regex ([\s\S]*) replace_matched 294 | begin 295 | \\rmdt.p1("GPE _L29 enter")\n 296 | %1\n 297 | \\rmdt.p1("GPE _L29 exit")\n 298 | end; 299 | 300 | into method label _L2A code_regex ([\s\S]*) replace_matched 301 | begin 302 | \\rmdt.p1("GPE _L2A enter")\n 303 | %1\n 304 | \\rmdt.p1("GPE _L2A exit")\n 305 | end; 306 | 307 | into method label _L2B code_regex ([\s\S]*) replace_matched 308 | begin 309 | \\rmdt.p1("GPE _L2B enter")\n 310 | %1\n 311 | \\rmdt.p1("GPE _L2B exit")\n 312 | end; 313 | 314 | into method label _L2C code_regex ([\s\S]*) replace_matched 315 | begin 316 | \\rmdt.p1("GPE _L2C enter")\n 317 | %1\n 318 | \\rmdt.p1("GPE _L2C exit")\n 319 | end; 320 | 321 | into method label _L2D code_regex ([\s\S]*) replace_matched 322 | begin 323 | \\rmdt.p1("GPE _L2D enter")\n 324 | %1\n 325 | \\rmdt.p1("GPE _L2D exit")\n 326 | end; 327 | 328 | into method label _L2E code_regex ([\s\S]*) replace_matched 329 | begin 330 | \\rmdt.p1("GPE _L2E enter")\n 331 | %1\n 332 | \\rmdt.p1("GPE _L2E exit")\n 333 | end; 334 | 335 | into method label _L2F code_regex ([\s\S]*) replace_matched 336 | begin 337 | \\rmdt.p1("GPE _L2F enter")\n 338 | %1\n 339 | \\rmdt.p1("GPE _L2F exit")\n 340 | end; 341 | 342 | into method label _L30 code_regex ([\s\S]*) replace_matched 343 | begin 344 | \\rmdt.p1("GPE _L30 enter")\n 345 | %1\n 346 | \\rmdt.p1("GPE _L30 exit")\n 347 | end; 348 | 349 | into method label _L31 code_regex ([\s\S]*) replace_matched 350 | begin 351 | \\rmdt.p1("GPE _L31 enter")\n 352 | %1\n 353 | \\rmdt.p1("GPE _L31 exit")\n 354 | end; 355 | 356 | into method label _L32 code_regex ([\s\S]*) replace_matched 357 | begin 358 | \\rmdt.p1("GPE _L32 enter")\n 359 | %1\n 360 | \\rmdt.p1("GPE _L32 exit")\n 361 | end; 362 | 363 | into method label _L33 code_regex ([\s\S]*) replace_matched 364 | begin 365 | \\rmdt.p1("GPE _L33 enter")\n 366 | %1\n 367 | \\rmdt.p1("GPE _L33 exit")\n 368 | end; 369 | 370 | into method label _L34 code_regex ([\s\S]*) replace_matched 371 | begin 372 | \\rmdt.p1("GPE _L34 enter")\n 373 | %1\n 374 | \\rmdt.p1("GPE _L34 exit")\n 375 | end; 376 | 377 | into method label _L35 code_regex ([\s\S]*) replace_matched 378 | begin 379 | \\rmdt.p1("GPE _L35 enter")\n 380 | %1\n 381 | \\rmdt.p1("GPE _L35 exit")\n 382 | end; 383 | 384 | into method label _L36 code_regex ([\s\S]*) replace_matched 385 | begin 386 | \\rmdt.p1("GPE _L36 enter")\n 387 | %1\n 388 | \\rmdt.p1("GPE _L36 exit")\n 389 | end; 390 | 391 | into method label _L37 code_regex ([\s\S]*) replace_matched 392 | begin 393 | \\rmdt.p1("GPE _L37 enter")\n 394 | %1\n 395 | \\rmdt.p1("GPE _L37 exit")\n 396 | end; 397 | 398 | into method label _L38 code_regex ([\s\S]*) replace_matched 399 | begin 400 | \\rmdt.p1("GPE _L38 enter")\n 401 | %1\n 402 | \\rmdt.p1("GPE _L38 exit")\n 403 | end; 404 | 405 | into method label _L39 code_regex ([\s\S]*) replace_matched 406 | begin 407 | \\rmdt.p1("GPE _L39 enter")\n 408 | %1\n 409 | \\rmdt.p1("GPE _L39 exit")\n 410 | end; 411 | 412 | into method label _L3A code_regex ([\s\S]*) replace_matched 413 | begin 414 | \\rmdt.p1("GPE _L3A enter")\n 415 | %1\n 416 | \\rmdt.p1("GPE _L3A exit")\n 417 | end; 418 | 419 | into method label _L3B code_regex ([\s\S]*) replace_matched 420 | begin 421 | \\rmdt.p1("GPE _L3B enter")\n 422 | %1\n 423 | \\rmdt.p1("GPE _L3B exit")\n 424 | end; 425 | 426 | into method label _L3C code_regex ([\s\S]*) replace_matched 427 | begin 428 | \\rmdt.p1("GPE _L3C enter")\n 429 | %1\n 430 | \\rmdt.p1("GPE _L3C exit")\n 431 | end; 432 | 433 | into method label _L3D code_regex ([\s\S]*) replace_matched 434 | begin 435 | \\rmdt.p1("GPE _L3D enter")\n 436 | %1\n 437 | \\rmdt.p1("GPE _L3D exit")\n 438 | end; 439 | 440 | into method label _L3E code_regex ([\s\S]*) replace_matched 441 | begin 442 | \\rmdt.p1("GPE _L3E enter")\n 443 | %1\n 444 | \\rmdt.p1("GPE _L3E exit")\n 445 | end; 446 | 447 | into method label _L3F code_regex ([\s\S]*) replace_matched 448 | begin 449 | \\rmdt.p1("GPE _L3F enter")\n 450 | %1\n 451 | \\rmdt.p1("GPE _L3F exit")\n 452 | end; 453 | 454 | into method label _L40 code_regex ([\s\S]*) replace_matched 455 | begin 456 | \\rmdt.p1("GPE _L40 enter")\n 457 | %1\n 458 | \\rmdt.p1("GPE _L40 exit")\n 459 | end; 460 | 461 | into method label _L41 code_regex ([\s\S]*) replace_matched 462 | begin 463 | \\rmdt.p1("GPE _L41 enter")\n 464 | %1\n 465 | \\rmdt.p1("GPE _L41 exit")\n 466 | end; 467 | 468 | into method label _L42 code_regex ([\s\S]*) replace_matched 469 | begin 470 | \\rmdt.p1("GPE _L42 enter")\n 471 | %1\n 472 | \\rmdt.p1("GPE _L42 exit")\n 473 | end; 474 | 475 | into method label _L43 code_regex ([\s\S]*) replace_matched 476 | begin 477 | \\rmdt.p1("GPE _L43 enter")\n 478 | %1\n 479 | \\rmdt.p1("GPE _L43 exit")\n 480 | end; 481 | 482 | into method label _L44 code_regex ([\s\S]*) replace_matched 483 | begin 484 | \\rmdt.p1("GPE _L44 enter")\n 485 | %1\n 486 | \\rmdt.p1("GPE _L44 exit")\n 487 | end; 488 | 489 | into method label _L45 code_regex ([\s\S]*) replace_matched 490 | begin 491 | \\rmdt.p1("GPE _L45 enter")\n 492 | %1\n 493 | \\rmdt.p1("GPE _L45 exit")\n 494 | end; 495 | 496 | into method label _L46 code_regex ([\s\S]*) replace_matched 497 | begin 498 | \\rmdt.p1("GPE _L46 enter")\n 499 | %1\n 500 | \\rmdt.p1("GPE _L46 exit")\n 501 | end; 502 | 503 | into method label _L47 code_regex ([\s\S]*) replace_matched 504 | begin 505 | \\rmdt.p1("GPE _L47 enter")\n 506 | %1\n 507 | \\rmdt.p1("GPE _L47 exit")\n 508 | end; 509 | 510 | into method label _L48 code_regex ([\s\S]*) replace_matched 511 | begin 512 | \\rmdt.p1("GPE _L48 enter")\n 513 | %1\n 514 | \\rmdt.p1("GPE _L48 exit")\n 515 | end; 516 | 517 | into method label _L49 code_regex ([\s\S]*) replace_matched 518 | begin 519 | \\rmdt.p1("GPE _L49 enter")\n 520 | %1\n 521 | \\rmdt.p1("GPE _L49 exit")\n 522 | end; 523 | 524 | into method label _L4A code_regex ([\s\S]*) replace_matched 525 | begin 526 | \\rmdt.p1("GPE _L4A enter")\n 527 | %1\n 528 | \\rmdt.p1("GPE _L4A exit")\n 529 | end; 530 | 531 | into method label _L4B code_regex ([\s\S]*) replace_matched 532 | begin 533 | \\rmdt.p1("GPE _L4B enter")\n 534 | %1\n 535 | \\rmdt.p1("GPE _L4B exit")\n 536 | end; 537 | 538 | into method label _L4C code_regex ([\s\S]*) replace_matched 539 | begin 540 | \\rmdt.p1("GPE _L4C enter")\n 541 | %1\n 542 | \\rmdt.p1("GPE _L4C exit")\n 543 | end; 544 | 545 | into method label _L4D code_regex ([\s\S]*) replace_matched 546 | begin 547 | \\rmdt.p1("GPE _L4D enter")\n 548 | %1\n 549 | \\rmdt.p1("GPE _L4D exit")\n 550 | end; 551 | 552 | into method label _L4E code_regex ([\s\S]*) replace_matched 553 | begin 554 | \\rmdt.p1("GPE _L4E enter")\n 555 | %1\n 556 | \\rmdt.p1("GPE _L4E exit")\n 557 | end; 558 | 559 | into method label _L4F code_regex ([\s\S]*) replace_matched 560 | begin 561 | \\rmdt.p1("GPE _L4F enter")\n 562 | %1\n 563 | \\rmdt.p1("GPE _L4F exit")\n 564 | end; 565 | 566 | into method label _L50 code_regex ([\s\S]*) replace_matched 567 | begin 568 | \\rmdt.p1("GPE _L50 enter")\n 569 | %1\n 570 | \\rmdt.p1("GPE _L50 exit")\n 571 | end; 572 | 573 | into method label _L51 code_regex ([\s\S]*) replace_matched 574 | begin 575 | \\rmdt.p1("GPE _L51 enter")\n 576 | %1\n 577 | \\rmdt.p1("GPE _L51 exit")\n 578 | end; 579 | 580 | into method label _L52 code_regex ([\s\S]*) replace_matched 581 | begin 582 | \\rmdt.p1("GPE _L52 enter")\n 583 | %1\n 584 | \\rmdt.p1("GPE _L52 exit")\n 585 | end; 586 | 587 | into method label _L53 code_regex ([\s\S]*) replace_matched 588 | begin 589 | \\rmdt.p1("GPE _L53 enter")\n 590 | %1\n 591 | \\rmdt.p1("GPE _L53 exit")\n 592 | end; 593 | 594 | into method label _L54 code_regex ([\s\S]*) replace_matched 595 | begin 596 | \\rmdt.p1("GPE _L54 enter")\n 597 | %1\n 598 | \\rmdt.p1("GPE _L54 exit")\n 599 | end; 600 | 601 | into method label _L55 code_regex ([\s\S]*) replace_matched 602 | begin 603 | \\rmdt.p1("GPE _L55 enter")\n 604 | %1\n 605 | \\rmdt.p1("GPE _L55 exit")\n 606 | end; 607 | 608 | into method label _L56 code_regex ([\s\S]*) replace_matched 609 | begin 610 | \\rmdt.p1("GPE _L56 enter")\n 611 | %1\n 612 | \\rmdt.p1("GPE _L56 exit")\n 613 | end; 614 | 615 | into method label _L57 code_regex ([\s\S]*) replace_matched 616 | begin 617 | \\rmdt.p1("GPE _L57 enter")\n 618 | %1\n 619 | \\rmdt.p1("GPE _L57 exit")\n 620 | end; 621 | 622 | into method label _L58 code_regex ([\s\S]*) replace_matched 623 | begin 624 | \\rmdt.p1("GPE _L58 enter")\n 625 | %1\n 626 | \\rmdt.p1("GPE _L58 exit")\n 627 | end; 628 | 629 | into method label _L59 code_regex ([\s\S]*) replace_matched 630 | begin 631 | \\rmdt.p1("GPE _L59 enter")\n 632 | %1\n 633 | \\rmdt.p1("GPE _L59 exit")\n 634 | end; 635 | 636 | into method label _L5A code_regex ([\s\S]*) replace_matched 637 | begin 638 | \\rmdt.p1("GPE _L5A enter")\n 639 | %1\n 640 | \\rmdt.p1("GPE _L5A exit")\n 641 | end; 642 | 643 | into method label _L5B code_regex ([\s\S]*) replace_matched 644 | begin 645 | \\rmdt.p1("GPE _L5B enter")\n 646 | %1\n 647 | \\rmdt.p1("GPE _L5B exit")\n 648 | end; 649 | 650 | into method label _L5C code_regex ([\s\S]*) replace_matched 651 | begin 652 | \\rmdt.p1("GPE _L5C enter")\n 653 | %1\n 654 | \\rmdt.p1("GPE _L5C exit")\n 655 | end; 656 | 657 | into method label _L5D code_regex ([\s\S]*) replace_matched 658 | begin 659 | \\rmdt.p1("GPE _L5D enter")\n 660 | %1\n 661 | \\rmdt.p1("GPE _L5D exit")\n 662 | end; 663 | 664 | into method label _L5E code_regex ([\s\S]*) replace_matched 665 | begin 666 | \\rmdt.p1("GPE _L5E enter")\n 667 | %1\n 668 | \\rmdt.p1("GPE _L5E exit")\n 669 | end; 670 | 671 | into method label _L5F code_regex ([\s\S]*) replace_matched 672 | begin 673 | \\rmdt.p1("GPE _L5F enter")\n 674 | %1\n 675 | \\rmdt.p1("GPE _L5F exit")\n 676 | end; 677 | 678 | into method label _L60 code_regex ([\s\S]*) replace_matched 679 | begin 680 | \\rmdt.p1("GPE _L60 enter")\n 681 | %1\n 682 | \\rmdt.p1("GPE _L60 exit")\n 683 | end; 684 | 685 | into method label _L61 code_regex ([\s\S]*) replace_matched 686 | begin 687 | \\rmdt.p1("GPE _L61 enter")\n 688 | %1\n 689 | \\rmdt.p1("GPE _L61 exit")\n 690 | end; 691 | 692 | into method label _L62 code_regex ([\s\S]*) replace_matched 693 | begin 694 | \\rmdt.p1("GPE _L62 enter")\n 695 | %1\n 696 | \\rmdt.p1("GPE _L62 exit")\n 697 | end; 698 | 699 | into method label _L63 code_regex ([\s\S]*) replace_matched 700 | begin 701 | \\rmdt.p1("GPE _L63 enter")\n 702 | %1\n 703 | \\rmdt.p1("GPE _L63 exit")\n 704 | end; 705 | 706 | into method label _L64 code_regex ([\s\S]*) replace_matched 707 | begin 708 | \\rmdt.p1("GPE _L64 enter")\n 709 | %1\n 710 | \\rmdt.p1("GPE _L64 exit")\n 711 | end; 712 | 713 | into method label _L65 code_regex ([\s\S]*) replace_matched 714 | begin 715 | \\rmdt.p1("GPE _L65 enter")\n 716 | %1\n 717 | \\rmdt.p1("GPE _L65 exit")\n 718 | end; 719 | 720 | into method label _L66 code_regex ([\s\S]*) replace_matched 721 | begin 722 | \\rmdt.p1("GPE _L66 enter")\n 723 | %1\n 724 | \\rmdt.p1("GPE _L66 exit")\n 725 | end; 726 | 727 | into method label _L67 code_regex ([\s\S]*) replace_matched 728 | begin 729 | \\rmdt.p1("GPE _L67 enter")\n 730 | %1\n 731 | \\rmdt.p1("GPE _L67 exit")\n 732 | end; 733 | 734 | into method label _L68 code_regex ([\s\S]*) replace_matched 735 | begin 736 | \\rmdt.p1("GPE _L68 enter")\n 737 | %1\n 738 | \\rmdt.p1("GPE _L68 exit")\n 739 | end; 740 | 741 | into method label _L69 code_regex ([\s\S]*) replace_matched 742 | begin 743 | \\rmdt.p1("GPE _L69 enter")\n 744 | %1\n 745 | \\rmdt.p1("GPE _L69 exit")\n 746 | end; 747 | 748 | into method label _L6A code_regex ([\s\S]*) replace_matched 749 | begin 750 | \\rmdt.p1("GPE _L6A enter")\n 751 | %1\n 752 | \\rmdt.p1("GPE _L6A exit")\n 753 | end; 754 | 755 | into method label _L6B code_regex ([\s\S]*) replace_matched 756 | begin 757 | \\rmdt.p1("GPE _L6B enter")\n 758 | %1\n 759 | \\rmdt.p1("GPE _L6B exit")\n 760 | end; 761 | 762 | into method label _L6C code_regex ([\s\S]*) replace_matched 763 | begin 764 | \\rmdt.p1("GPE _L6C enter")\n 765 | %1\n 766 | \\rmdt.p1("GPE _L6C exit")\n 767 | end; 768 | 769 | into method label _L6D code_regex ([\s\S]*) replace_matched 770 | begin 771 | \\rmdt.p1("GPE _L6D enter")\n 772 | %1\n 773 | \\rmdt.p1("GPE _L6D exit")\n 774 | end; 775 | 776 | into method label _L6E code_regex ([\s\S]*) replace_matched 777 | begin 778 | \\rmdt.p1("GPE _L6E enter")\n 779 | %1\n 780 | \\rmdt.p1("GPE _L6E exit")\n 781 | end; 782 | 783 | into method label _L6F code_regex ([\s\S]*) replace_matched 784 | begin 785 | \\rmdt.p1("GPE _L6F enter")\n 786 | %1\n 787 | \\rmdt.p1("GPE _L6F exit")\n 788 | end; 789 | 790 | into method label _L70 code_regex ([\s\S]*) replace_matched 791 | begin 792 | \\rmdt.p1("GPE _L70 enter")\n 793 | %1\n 794 | \\rmdt.p1("GPE _L70 exit")\n 795 | end; 796 | 797 | into method label _L71 code_regex ([\s\S]*) replace_matched 798 | begin 799 | \\rmdt.p1("GPE _L71 enter")\n 800 | %1\n 801 | \\rmdt.p1("GPE _L71 exit")\n 802 | end; 803 | 804 | into method label _L72 code_regex ([\s\S]*) replace_matched 805 | begin 806 | \\rmdt.p1("GPE _L72 enter")\n 807 | %1\n 808 | \\rmdt.p1("GPE _L72 exit")\n 809 | end; 810 | 811 | into method label _L73 code_regex ([\s\S]*) replace_matched 812 | begin 813 | \\rmdt.p1("GPE _L73 enter")\n 814 | %1\n 815 | \\rmdt.p1("GPE _L73 exit")\n 816 | end; 817 | 818 | into method label _L74 code_regex ([\s\S]*) replace_matched 819 | begin 820 | \\rmdt.p1("GPE _L74 enter")\n 821 | %1\n 822 | \\rmdt.p1("GPE _L74 exit")\n 823 | end; 824 | 825 | into method label _L75 code_regex ([\s\S]*) replace_matched 826 | begin 827 | \\rmdt.p1("GPE _L75 enter")\n 828 | %1\n 829 | \\rmdt.p1("GPE _L75 exit")\n 830 | end; 831 | 832 | into method label _L76 code_regex ([\s\S]*) replace_matched 833 | begin 834 | \\rmdt.p1("GPE _L76 enter")\n 835 | %1\n 836 | \\rmdt.p1("GPE _L76 exit")\n 837 | end; 838 | 839 | into method label _L77 code_regex ([\s\S]*) replace_matched 840 | begin 841 | \\rmdt.p1("GPE _L77 enter")\n 842 | %1\n 843 | \\rmdt.p1("GPE _L77 exit")\n 844 | end; 845 | 846 | into method label _L78 code_regex ([\s\S]*) replace_matched 847 | begin 848 | \\rmdt.p1("GPE _L78 enter")\n 849 | %1\n 850 | \\rmdt.p1("GPE _L78 exit")\n 851 | end; 852 | 853 | into method label _L79 code_regex ([\s\S]*) replace_matched 854 | begin 855 | \\rmdt.p1("GPE _L79 enter")\n 856 | %1\n 857 | \\rmdt.p1("GPE _L79 exit")\n 858 | end; 859 | 860 | into method label _L7A code_regex ([\s\S]*) replace_matched 861 | begin 862 | \\rmdt.p1("GPE _L7A enter")\n 863 | %1\n 864 | \\rmdt.p1("GPE _L7A exit")\n 865 | end; 866 | 867 | into method label _L7B code_regex ([\s\S]*) replace_matched 868 | begin 869 | \\rmdt.p1("GPE _L7B enter")\n 870 | %1\n 871 | \\rmdt.p1("GPE _L7B exit")\n 872 | end; 873 | 874 | into method label _L7C code_regex ([\s\S]*) replace_matched 875 | begin 876 | \\rmdt.p1("GPE _L7C enter")\n 877 | %1\n 878 | \\rmdt.p1("GPE _L7C exit")\n 879 | end; 880 | 881 | into method label _L7D code_regex ([\s\S]*) replace_matched 882 | begin 883 | \\rmdt.p1("GPE _L7D enter")\n 884 | %1\n 885 | \\rmdt.p1("GPE _L7D exit")\n 886 | end; 887 | 888 | into method label _L7E code_regex ([\s\S]*) replace_matched 889 | begin 890 | \\rmdt.p1("GPE _L7E enter")\n 891 | %1\n 892 | \\rmdt.p1("GPE _L7E exit")\n 893 | end; 894 | 895 | into method label _L7F code_regex ([\s\S]*) replace_matched 896 | begin 897 | \\rmdt.p1("GPE _L7F enter")\n 898 | %1\n 899 | \\rmdt.p1("GPE _L7F exit")\n 900 | end; 901 | 902 | into method label _L80 code_regex ([\s\S]*) replace_matched 903 | begin 904 | \\rmdt.p1("GPE _L80 enter")\n 905 | %1\n 906 | \\rmdt.p1("GPE _L80 exit")\n 907 | end; 908 | 909 | into method label _L81 code_regex ([\s\S]*) replace_matched 910 | begin 911 | \\rmdt.p1("GPE _L81 enter")\n 912 | %1\n 913 | \\rmdt.p1("GPE _L81 exit")\n 914 | end; 915 | 916 | into method label _L82 code_regex ([\s\S]*) replace_matched 917 | begin 918 | \\rmdt.p1("GPE _L82 enter")\n 919 | %1\n 920 | \\rmdt.p1("GPE _L82 exit")\n 921 | end; 922 | 923 | into method label _L83 code_regex ([\s\S]*) replace_matched 924 | begin 925 | \\rmdt.p1("GPE _L83 enter")\n 926 | %1\n 927 | \\rmdt.p1("GPE _L83 exit")\n 928 | end; 929 | 930 | into method label _L84 code_regex ([\s\S]*) replace_matched 931 | begin 932 | \\rmdt.p1("GPE _L84 enter")\n 933 | %1\n 934 | \\rmdt.p1("GPE _L84 exit")\n 935 | end; 936 | 937 | into method label _L85 code_regex ([\s\S]*) replace_matched 938 | begin 939 | \\rmdt.p1("GPE _L85 enter")\n 940 | %1\n 941 | \\rmdt.p1("GPE _L85 exit")\n 942 | end; 943 | 944 | into method label _L86 code_regex ([\s\S]*) replace_matched 945 | begin 946 | \\rmdt.p1("GPE _L86 enter")\n 947 | %1\n 948 | \\rmdt.p1("GPE _L86 exit")\n 949 | end; 950 | 951 | into method label _L87 code_regex ([\s\S]*) replace_matched 952 | begin 953 | \\rmdt.p1("GPE _L87 enter")\n 954 | %1\n 955 | \\rmdt.p1("GPE _L87 exit")\n 956 | end; 957 | 958 | into method label _L88 code_regex ([\s\S]*) replace_matched 959 | begin 960 | \\rmdt.p1("GPE _L88 enter")\n 961 | %1\n 962 | \\rmdt.p1("GPE _L88 exit")\n 963 | end; 964 | 965 | into method label _L89 code_regex ([\s\S]*) replace_matched 966 | begin 967 | \\rmdt.p1("GPE _L89 enter")\n 968 | %1\n 969 | \\rmdt.p1("GPE _L89 exit")\n 970 | end; 971 | 972 | into method label _L8A code_regex ([\s\S]*) replace_matched 973 | begin 974 | \\rmdt.p1("GPE _L8A enter")\n 975 | %1\n 976 | \\rmdt.p1("GPE _L8A exit")\n 977 | end; 978 | 979 | into method label _L8B code_regex ([\s\S]*) replace_matched 980 | begin 981 | \\rmdt.p1("GPE _L8B enter")\n 982 | %1\n 983 | \\rmdt.p1("GPE _L8B exit")\n 984 | end; 985 | 986 | into method label _L8C code_regex ([\s\S]*) replace_matched 987 | begin 988 | \\rmdt.p1("GPE _L8C enter")\n 989 | %1\n 990 | \\rmdt.p1("GPE _L8C exit")\n 991 | end; 992 | 993 | into method label _L8D code_regex ([\s\S]*) replace_matched 994 | begin 995 | \\rmdt.p1("GPE _L8D enter")\n 996 | %1\n 997 | \\rmdt.p1("GPE _L8D exit")\n 998 | end; 999 | 1000 | into method label _L8E code_regex ([\s\S]*) replace_matched 1001 | begin 1002 | \\rmdt.p1("GPE _L8E enter")\n 1003 | %1\n 1004 | \\rmdt.p1("GPE _L8E exit")\n 1005 | end; 1006 | 1007 | into method label _L8F code_regex ([\s\S]*) replace_matched 1008 | begin 1009 | \\rmdt.p1("GPE _L8F enter")\n 1010 | %1\n 1011 | \\rmdt.p1("GPE _L8F exit")\n 1012 | end; 1013 | 1014 | into method label _L90 code_regex ([\s\S]*) replace_matched 1015 | begin 1016 | \\rmdt.p1("GPE _L90 enter")\n 1017 | %1\n 1018 | \\rmdt.p1("GPE _L90 exit")\n 1019 | end; 1020 | 1021 | into method label _L91 code_regex ([\s\S]*) replace_matched 1022 | begin 1023 | \\rmdt.p1("GPE _L91 enter")\n 1024 | %1\n 1025 | \\rmdt.p1("GPE _L91 exit")\n 1026 | end; 1027 | 1028 | into method label _L92 code_regex ([\s\S]*) replace_matched 1029 | begin 1030 | \\rmdt.p1("GPE _L92 enter")\n 1031 | %1\n 1032 | \\rmdt.p1("GPE _L92 exit")\n 1033 | end; 1034 | 1035 | into method label _L93 code_regex ([\s\S]*) replace_matched 1036 | begin 1037 | \\rmdt.p1("GPE _L93 enter")\n 1038 | %1\n 1039 | \\rmdt.p1("GPE _L93 exit")\n 1040 | end; 1041 | 1042 | into method label _L94 code_regex ([\s\S]*) replace_matched 1043 | begin 1044 | \\rmdt.p1("GPE _L94 enter")\n 1045 | %1\n 1046 | \\rmdt.p1("GPE _L94 exit")\n 1047 | end; 1048 | 1049 | into method label _L95 code_regex ([\s\S]*) replace_matched 1050 | begin 1051 | \\rmdt.p1("GPE _L95 enter")\n 1052 | %1\n 1053 | \\rmdt.p1("GPE _L95 exit")\n 1054 | end; 1055 | 1056 | into method label _L96 code_regex ([\s\S]*) replace_matched 1057 | begin 1058 | \\rmdt.p1("GPE _L96 enter")\n 1059 | %1\n 1060 | \\rmdt.p1("GPE _L96 exit")\n 1061 | end; 1062 | 1063 | into method label _L97 code_regex ([\s\S]*) replace_matched 1064 | begin 1065 | \\rmdt.p1("GPE _L97 enter")\n 1066 | %1\n 1067 | \\rmdt.p1("GPE _L97 exit")\n 1068 | end; 1069 | 1070 | into method label _L98 code_regex ([\s\S]*) replace_matched 1071 | begin 1072 | \\rmdt.p1("GPE _L98 enter")\n 1073 | %1\n 1074 | \\rmdt.p1("GPE _L98 exit")\n 1075 | end; 1076 | 1077 | into method label _L99 code_regex ([\s\S]*) replace_matched 1078 | begin 1079 | \\rmdt.p1("GPE _L99 enter")\n 1080 | %1\n 1081 | \\rmdt.p1("GPE _L99 exit")\n 1082 | end; 1083 | 1084 | into method label _L9A code_regex ([\s\S]*) replace_matched 1085 | begin 1086 | \\rmdt.p1("GPE _L9A enter")\n 1087 | %1\n 1088 | \\rmdt.p1("GPE _L9A exit")\n 1089 | end; 1090 | 1091 | into method label _L9B code_regex ([\s\S]*) replace_matched 1092 | begin 1093 | \\rmdt.p1("GPE _L9B enter")\n 1094 | %1\n 1095 | \\rmdt.p1("GPE _L9B exit")\n 1096 | end; 1097 | 1098 | into method label _L9C code_regex ([\s\S]*) replace_matched 1099 | begin 1100 | \\rmdt.p1("GPE _L9C enter")\n 1101 | %1\n 1102 | \\rmdt.p1("GPE _L9C exit")\n 1103 | end; 1104 | 1105 | into method label _L9D code_regex ([\s\S]*) replace_matched 1106 | begin 1107 | \\rmdt.p1("GPE _L9D enter")\n 1108 | %1\n 1109 | \\rmdt.p1("GPE _L9D exit")\n 1110 | end; 1111 | 1112 | into method label _L9E code_regex ([\s\S]*) replace_matched 1113 | begin 1114 | \\rmdt.p1("GPE _L9E enter")\n 1115 | %1\n 1116 | \\rmdt.p1("GPE _L9E exit")\n 1117 | end; 1118 | 1119 | into method label _L9F code_regex ([\s\S]*) replace_matched 1120 | begin 1121 | \\rmdt.p1("GPE _L9F enter")\n 1122 | %1\n 1123 | \\rmdt.p1("GPE _L9F exit")\n 1124 | end; 1125 | 1126 | into method label _LA0 code_regex ([\s\S]*) replace_matched 1127 | begin 1128 | \\rmdt.p1("GPE _LA0 enter")\n 1129 | %1\n 1130 | \\rmdt.p1("GPE _LA0 exit")\n 1131 | end; 1132 | 1133 | into method label _LA1 code_regex ([\s\S]*) replace_matched 1134 | begin 1135 | \\rmdt.p1("GPE _LA1 enter")\n 1136 | %1\n 1137 | \\rmdt.p1("GPE _LA1 exit")\n 1138 | end; 1139 | 1140 | into method label _LA2 code_regex ([\s\S]*) replace_matched 1141 | begin 1142 | \\rmdt.p1("GPE _LA2 enter")\n 1143 | %1\n 1144 | \\rmdt.p1("GPE _LA2 exit")\n 1145 | end; 1146 | 1147 | into method label _LA3 code_regex ([\s\S]*) replace_matched 1148 | begin 1149 | \\rmdt.p1("GPE _LA3 enter")\n 1150 | %1\n 1151 | \\rmdt.p1("GPE _LA3 exit")\n 1152 | end; 1153 | 1154 | into method label _LA4 code_regex ([\s\S]*) replace_matched 1155 | begin 1156 | \\rmdt.p1("GPE _LA4 enter")\n 1157 | %1\n 1158 | \\rmdt.p1("GPE _LA4 exit")\n 1159 | end; 1160 | 1161 | into method label _LA5 code_regex ([\s\S]*) replace_matched 1162 | begin 1163 | \\rmdt.p1("GPE _LA5 enter")\n 1164 | %1\n 1165 | \\rmdt.p1("GPE _LA5 exit")\n 1166 | end; 1167 | 1168 | into method label _LA6 code_regex ([\s\S]*) replace_matched 1169 | begin 1170 | \\rmdt.p1("GPE _LA6 enter")\n 1171 | %1\n 1172 | \\rmdt.p1("GPE _LA6 exit")\n 1173 | end; 1174 | 1175 | into method label _LA7 code_regex ([\s\S]*) replace_matched 1176 | begin 1177 | \\rmdt.p1("GPE _LA7 enter")\n 1178 | %1\n 1179 | \\rmdt.p1("GPE _LA7 exit")\n 1180 | end; 1181 | 1182 | into method label _LA8 code_regex ([\s\S]*) replace_matched 1183 | begin 1184 | \\rmdt.p1("GPE _LA8 enter")\n 1185 | %1\n 1186 | \\rmdt.p1("GPE _LA8 exit")\n 1187 | end; 1188 | 1189 | into method label _LA9 code_regex ([\s\S]*) replace_matched 1190 | begin 1191 | \\rmdt.p1("GPE _LA9 enter")\n 1192 | %1\n 1193 | \\rmdt.p1("GPE _LA9 exit")\n 1194 | end; 1195 | 1196 | into method label _LAA code_regex ([\s\S]*) replace_matched 1197 | begin 1198 | \\rmdt.p1("GPE _LAA enter")\n 1199 | %1\n 1200 | \\rmdt.p1("GPE _LAA exit")\n 1201 | end; 1202 | 1203 | into method label _LAB code_regex ([\s\S]*) replace_matched 1204 | begin 1205 | \\rmdt.p1("GPE _LAB enter")\n 1206 | %1\n 1207 | \\rmdt.p1("GPE _LAB exit")\n 1208 | end; 1209 | 1210 | into method label _LAC code_regex ([\s\S]*) replace_matched 1211 | begin 1212 | \\rmdt.p1("GPE _LAC enter")\n 1213 | %1\n 1214 | \\rmdt.p1("GPE _LAC exit")\n 1215 | end; 1216 | 1217 | into method label _LAD code_regex ([\s\S]*) replace_matched 1218 | begin 1219 | \\rmdt.p1("GPE _LAD enter")\n 1220 | %1\n 1221 | \\rmdt.p1("GPE _LAD exit")\n 1222 | end; 1223 | 1224 | into method label _LAE code_regex ([\s\S]*) replace_matched 1225 | begin 1226 | \\rmdt.p1("GPE _LAE enter")\n 1227 | %1\n 1228 | \\rmdt.p1("GPE _LAE exit")\n 1229 | end; 1230 | 1231 | into method label _LAF code_regex ([\s\S]*) replace_matched 1232 | begin 1233 | \\rmdt.p1("GPE _LAF enter")\n 1234 | %1\n 1235 | \\rmdt.p1("GPE _LAF exit")\n 1236 | end; 1237 | 1238 | into method label _LB0 code_regex ([\s\S]*) replace_matched 1239 | begin 1240 | \\rmdt.p1("GPE _LB0 enter")\n 1241 | %1\n 1242 | \\rmdt.p1("GPE _LB0 exit")\n 1243 | end; 1244 | 1245 | into method label _LB1 code_regex ([\s\S]*) replace_matched 1246 | begin 1247 | \\rmdt.p1("GPE _LB1 enter")\n 1248 | %1\n 1249 | \\rmdt.p1("GPE _LB1 exit")\n 1250 | end; 1251 | 1252 | into method label _LB2 code_regex ([\s\S]*) replace_matched 1253 | begin 1254 | \\rmdt.p1("GPE _LB2 enter")\n 1255 | %1\n 1256 | \\rmdt.p1("GPE _LB2 exit")\n 1257 | end; 1258 | 1259 | into method label _LB3 code_regex ([\s\S]*) replace_matched 1260 | begin 1261 | \\rmdt.p1("GPE _LB3 enter")\n 1262 | %1\n 1263 | \\rmdt.p1("GPE _LB3 exit")\n 1264 | end; 1265 | 1266 | into method label _LB4 code_regex ([\s\S]*) replace_matched 1267 | begin 1268 | \\rmdt.p1("GPE _LB4 enter")\n 1269 | %1\n 1270 | \\rmdt.p1("GPE _LB4 exit")\n 1271 | end; 1272 | 1273 | into method label _LB5 code_regex ([\s\S]*) replace_matched 1274 | begin 1275 | \\rmdt.p1("GPE _LB5 enter")\n 1276 | %1\n 1277 | \\rmdt.p1("GPE _LB5 exit")\n 1278 | end; 1279 | 1280 | into method label _LB6 code_regex ([\s\S]*) replace_matched 1281 | begin 1282 | \\rmdt.p1("GPE _LB6 enter")\n 1283 | %1\n 1284 | \\rmdt.p1("GPE _LB6 exit")\n 1285 | end; 1286 | 1287 | into method label _LB7 code_regex ([\s\S]*) replace_matched 1288 | begin 1289 | \\rmdt.p1("GPE _LB7 enter")\n 1290 | %1\n 1291 | \\rmdt.p1("GPE _LB7 exit")\n 1292 | end; 1293 | 1294 | into method label _LB8 code_regex ([\s\S]*) replace_matched 1295 | begin 1296 | \\rmdt.p1("GPE _LB8 enter")\n 1297 | %1\n 1298 | \\rmdt.p1("GPE _LB8 exit")\n 1299 | end; 1300 | 1301 | into method label _LB9 code_regex ([\s\S]*) replace_matched 1302 | begin 1303 | \\rmdt.p1("GPE _LB9 enter")\n 1304 | %1\n 1305 | \\rmdt.p1("GPE _LB9 exit")\n 1306 | end; 1307 | 1308 | into method label _LBA code_regex ([\s\S]*) replace_matched 1309 | begin 1310 | \\rmdt.p1("GPE _LBA enter")\n 1311 | %1\n 1312 | \\rmdt.p1("GPE _LBA exit")\n 1313 | end; 1314 | 1315 | into method label _LBB code_regex ([\s\S]*) replace_matched 1316 | begin 1317 | \\rmdt.p1("GPE _LBB enter")\n 1318 | %1\n 1319 | \\rmdt.p1("GPE _LBB exit")\n 1320 | end; 1321 | 1322 | into method label _LBC code_regex ([\s\S]*) replace_matched 1323 | begin 1324 | \\rmdt.p1("GPE _LBC enter")\n 1325 | %1\n 1326 | \\rmdt.p1("GPE _LBC exit")\n 1327 | end; 1328 | 1329 | into method label _LBD code_regex ([\s\S]*) replace_matched 1330 | begin 1331 | \\rmdt.p1("GPE _LBD enter")\n 1332 | %1\n 1333 | \\rmdt.p1("GPE _LBD exit")\n 1334 | end; 1335 | 1336 | into method label _LBE code_regex ([\s\S]*) replace_matched 1337 | begin 1338 | \\rmdt.p1("GPE _LBE enter")\n 1339 | %1\n 1340 | \\rmdt.p1("GPE _LBE exit")\n 1341 | end; 1342 | 1343 | into method label _LBF code_regex ([\s\S]*) replace_matched 1344 | begin 1345 | \\rmdt.p1("GPE _LBF enter")\n 1346 | %1\n 1347 | \\rmdt.p1("GPE _LBF exit")\n 1348 | end; 1349 | 1350 | into method label _LC0 code_regex ([\s\S]*) replace_matched 1351 | begin 1352 | \\rmdt.p1("GPE _LC0 enter")\n 1353 | %1\n 1354 | \\rmdt.p1("GPE _LC0 exit")\n 1355 | end; 1356 | 1357 | into method label _LC1 code_regex ([\s\S]*) replace_matched 1358 | begin 1359 | \\rmdt.p1("GPE _LC1 enter")\n 1360 | %1\n 1361 | \\rmdt.p1("GPE _LC1 exit")\n 1362 | end; 1363 | 1364 | into method label _LC2 code_regex ([\s\S]*) replace_matched 1365 | begin 1366 | \\rmdt.p1("GPE _LC2 enter")\n 1367 | %1\n 1368 | \\rmdt.p1("GPE _LC2 exit")\n 1369 | end; 1370 | 1371 | into method label _LC3 code_regex ([\s\S]*) replace_matched 1372 | begin 1373 | \\rmdt.p1("GPE _LC3 enter")\n 1374 | %1\n 1375 | \\rmdt.p1("GPE _LC3 exit")\n 1376 | end; 1377 | 1378 | into method label _LC4 code_regex ([\s\S]*) replace_matched 1379 | begin 1380 | \\rmdt.p1("GPE _LC4 enter")\n 1381 | %1\n 1382 | \\rmdt.p1("GPE _LC4 exit")\n 1383 | end; 1384 | 1385 | into method label _LC5 code_regex ([\s\S]*) replace_matched 1386 | begin 1387 | \\rmdt.p1("GPE _LC5 enter")\n 1388 | %1\n 1389 | \\rmdt.p1("GPE _LC5 exit")\n 1390 | end; 1391 | 1392 | into method label _LC6 code_regex ([\s\S]*) replace_matched 1393 | begin 1394 | \\rmdt.p1("GPE _LC6 enter")\n 1395 | %1\n 1396 | \\rmdt.p1("GPE _LC6 exit")\n 1397 | end; 1398 | 1399 | into method label _LC7 code_regex ([\s\S]*) replace_matched 1400 | begin 1401 | \\rmdt.p1("GPE _LC7 enter")\n 1402 | %1\n 1403 | \\rmdt.p1("GPE _LC7 exit")\n 1404 | end; 1405 | 1406 | into method label _LC8 code_regex ([\s\S]*) replace_matched 1407 | begin 1408 | \\rmdt.p1("GPE _LC8 enter")\n 1409 | %1\n 1410 | \\rmdt.p1("GPE _LC8 exit")\n 1411 | end; 1412 | 1413 | into method label _LC9 code_regex ([\s\S]*) replace_matched 1414 | begin 1415 | \\rmdt.p1("GPE _LC9 enter")\n 1416 | %1\n 1417 | \\rmdt.p1("GPE _LC9 exit")\n 1418 | end; 1419 | 1420 | into method label _LCA code_regex ([\s\S]*) replace_matched 1421 | begin 1422 | \\rmdt.p1("GPE _LCA enter")\n 1423 | %1\n 1424 | \\rmdt.p1("GPE _LCA exit")\n 1425 | end; 1426 | 1427 | into method label _LCB code_regex ([\s\S]*) replace_matched 1428 | begin 1429 | \\rmdt.p1("GPE _LCB enter")\n 1430 | %1\n 1431 | \\rmdt.p1("GPE _LCB exit")\n 1432 | end; 1433 | 1434 | into method label _LCC code_regex ([\s\S]*) replace_matched 1435 | begin 1436 | \\rmdt.p1("GPE _LCC enter")\n 1437 | %1\n 1438 | \\rmdt.p1("GPE _LCC exit")\n 1439 | end; 1440 | 1441 | into method label _LCD code_regex ([\s\S]*) replace_matched 1442 | begin 1443 | \\rmdt.p1("GPE _LCD enter")\n 1444 | %1\n 1445 | \\rmdt.p1("GPE _LCD exit")\n 1446 | end; 1447 | 1448 | into method label _LCE code_regex ([\s\S]*) replace_matched 1449 | begin 1450 | \\rmdt.p1("GPE _LCE enter")\n 1451 | %1\n 1452 | \\rmdt.p1("GPE _LCE exit")\n 1453 | end; 1454 | 1455 | into method label _LCF code_regex ([\s\S]*) replace_matched 1456 | begin 1457 | \\rmdt.p1("GPE _LCF enter")\n 1458 | %1\n 1459 | \\rmdt.p1("GPE _LCF exit")\n 1460 | end; 1461 | 1462 | into method label _LD0 code_regex ([\s\S]*) replace_matched 1463 | begin 1464 | \\rmdt.p1("GPE _LD0 enter")\n 1465 | %1\n 1466 | \\rmdt.p1("GPE _LD0 exit")\n 1467 | end; 1468 | 1469 | into method label _LD1 code_regex ([\s\S]*) replace_matched 1470 | begin 1471 | \\rmdt.p1("GPE _LD1 enter")\n 1472 | %1\n 1473 | \\rmdt.p1("GPE _LD1 exit")\n 1474 | end; 1475 | 1476 | into method label _LD2 code_regex ([\s\S]*) replace_matched 1477 | begin 1478 | \\rmdt.p1("GPE _LD2 enter")\n 1479 | %1\n 1480 | \\rmdt.p1("GPE _LD2 exit")\n 1481 | end; 1482 | 1483 | into method label _LD3 code_regex ([\s\S]*) replace_matched 1484 | begin 1485 | \\rmdt.p1("GPE _LD3 enter")\n 1486 | %1\n 1487 | \\rmdt.p1("GPE _LD3 exit")\n 1488 | end; 1489 | 1490 | into method label _LD4 code_regex ([\s\S]*) replace_matched 1491 | begin 1492 | \\rmdt.p1("GPE _LD4 enter")\n 1493 | %1\n 1494 | \\rmdt.p1("GPE _LD4 exit")\n 1495 | end; 1496 | 1497 | into method label _LD5 code_regex ([\s\S]*) replace_matched 1498 | begin 1499 | \\rmdt.p1("GPE _LD5 enter")\n 1500 | %1\n 1501 | \\rmdt.p1("GPE _LD5 exit")\n 1502 | end; 1503 | 1504 | into method label _LD6 code_regex ([\s\S]*) replace_matched 1505 | begin 1506 | \\rmdt.p1("GPE _LD6 enter")\n 1507 | %1\n 1508 | \\rmdt.p1("GPE _LD6 exit")\n 1509 | end; 1510 | 1511 | into method label _LD7 code_regex ([\s\S]*) replace_matched 1512 | begin 1513 | \\rmdt.p1("GPE _LD7 enter")\n 1514 | %1\n 1515 | \\rmdt.p1("GPE _LD7 exit")\n 1516 | end; 1517 | 1518 | into method label _LD8 code_regex ([\s\S]*) replace_matched 1519 | begin 1520 | \\rmdt.p1("GPE _LD8 enter")\n 1521 | %1\n 1522 | \\rmdt.p1("GPE _LD8 exit")\n 1523 | end; 1524 | 1525 | into method label _LD9 code_regex ([\s\S]*) replace_matched 1526 | begin 1527 | \\rmdt.p1("GPE _LD9 enter")\n 1528 | %1\n 1529 | \\rmdt.p1("GPE _LD9 exit")\n 1530 | end; 1531 | 1532 | into method label _LDA code_regex ([\s\S]*) replace_matched 1533 | begin 1534 | \\rmdt.p1("GPE _LDA enter")\n 1535 | %1\n 1536 | \\rmdt.p1("GPE _LDA exit")\n 1537 | end; 1538 | 1539 | into method label _LDB code_regex ([\s\S]*) replace_matched 1540 | begin 1541 | \\rmdt.p1("GPE _LDB enter")\n 1542 | %1\n 1543 | \\rmdt.p1("GPE _LDB exit")\n 1544 | end; 1545 | 1546 | into method label _LDC code_regex ([\s\S]*) replace_matched 1547 | begin 1548 | \\rmdt.p1("GPE _LDC enter")\n 1549 | %1\n 1550 | \\rmdt.p1("GPE _LDC exit")\n 1551 | end; 1552 | 1553 | into method label _LDD code_regex ([\s\S]*) replace_matched 1554 | begin 1555 | \\rmdt.p1("GPE _LDD enter")\n 1556 | %1\n 1557 | \\rmdt.p1("GPE _LDD exit")\n 1558 | end; 1559 | 1560 | into method label _LDE code_regex ([\s\S]*) replace_matched 1561 | begin 1562 | \\rmdt.p1("GPE _LDE enter")\n 1563 | %1\n 1564 | \\rmdt.p1("GPE _LDE exit")\n 1565 | end; 1566 | 1567 | into method label _LDF code_regex ([\s\S]*) replace_matched 1568 | begin 1569 | \\rmdt.p1("GPE _LDF enter")\n 1570 | %1\n 1571 | \\rmdt.p1("GPE _LDF exit")\n 1572 | end; 1573 | 1574 | into method label _LE0 code_regex ([\s\S]*) replace_matched 1575 | begin 1576 | \\rmdt.p1("GPE _LE0 enter")\n 1577 | %1\n 1578 | \\rmdt.p1("GPE _LE0 exit")\n 1579 | end; 1580 | 1581 | into method label _LE1 code_regex ([\s\S]*) replace_matched 1582 | begin 1583 | \\rmdt.p1("GPE _LE1 enter")\n 1584 | %1\n 1585 | \\rmdt.p1("GPE _LE1 exit")\n 1586 | end; 1587 | 1588 | into method label _LE2 code_regex ([\s\S]*) replace_matched 1589 | begin 1590 | \\rmdt.p1("GPE _LE2 enter")\n 1591 | %1\n 1592 | \\rmdt.p1("GPE _LE2 exit")\n 1593 | end; 1594 | 1595 | into method label _LE3 code_regex ([\s\S]*) replace_matched 1596 | begin 1597 | \\rmdt.p1("GPE _LE3 enter")\n 1598 | %1\n 1599 | \\rmdt.p1("GPE _LE3 exit")\n 1600 | end; 1601 | 1602 | into method label _LE4 code_regex ([\s\S]*) replace_matched 1603 | begin 1604 | \\rmdt.p1("GPE _LE4 enter")\n 1605 | %1\n 1606 | \\rmdt.p1("GPE _LE4 exit")\n 1607 | end; 1608 | 1609 | into method label _LE5 code_regex ([\s\S]*) replace_matched 1610 | begin 1611 | \\rmdt.p1("GPE _LE5 enter")\n 1612 | %1\n 1613 | \\rmdt.p1("GPE _LE5 exit")\n 1614 | end; 1615 | 1616 | into method label _LE6 code_regex ([\s\S]*) replace_matched 1617 | begin 1618 | \\rmdt.p1("GPE _LE6 enter")\n 1619 | %1\n 1620 | \\rmdt.p1("GPE _LE6 exit")\n 1621 | end; 1622 | 1623 | into method label _LE7 code_regex ([\s\S]*) replace_matched 1624 | begin 1625 | \\rmdt.p1("GPE _LE7 enter")\n 1626 | %1\n 1627 | \\rmdt.p1("GPE _LE7 exit")\n 1628 | end; 1629 | 1630 | into method label _LE8 code_regex ([\s\S]*) replace_matched 1631 | begin 1632 | \\rmdt.p1("GPE _LE8 enter")\n 1633 | %1\n 1634 | \\rmdt.p1("GPE _LE8 exit")\n 1635 | end; 1636 | 1637 | into method label _LE9 code_regex ([\s\S]*) replace_matched 1638 | begin 1639 | \\rmdt.p1("GPE _LE9 enter")\n 1640 | %1\n 1641 | \\rmdt.p1("GPE _LE9 exit")\n 1642 | end; 1643 | 1644 | into method label _LEA code_regex ([\s\S]*) replace_matched 1645 | begin 1646 | \\rmdt.p1("GPE _LEA enter")\n 1647 | %1\n 1648 | \\rmdt.p1("GPE _LEA exit")\n 1649 | end; 1650 | 1651 | into method label _LEB code_regex ([\s\S]*) replace_matched 1652 | begin 1653 | \\rmdt.p1("GPE _LEB enter")\n 1654 | %1\n 1655 | \\rmdt.p1("GPE _LEB exit")\n 1656 | end; 1657 | 1658 | into method label _LEC code_regex ([\s\S]*) replace_matched 1659 | begin 1660 | \\rmdt.p1("GPE _LEC enter")\n 1661 | %1\n 1662 | \\rmdt.p1("GPE _LEC exit")\n 1663 | end; 1664 | 1665 | into method label _LED code_regex ([\s\S]*) replace_matched 1666 | begin 1667 | \\rmdt.p1("GPE _LED enter")\n 1668 | %1\n 1669 | \\rmdt.p1("GPE _LED exit")\n 1670 | end; 1671 | 1672 | into method label _LEE code_regex ([\s\S]*) replace_matched 1673 | begin 1674 | \\rmdt.p1("GPE _LEE enter")\n 1675 | %1\n 1676 | \\rmdt.p1("GPE _LEE exit")\n 1677 | end; 1678 | 1679 | into method label _LEF code_regex ([\s\S]*) replace_matched 1680 | begin 1681 | \\rmdt.p1("GPE _LEF enter")\n 1682 | %1\n 1683 | \\rmdt.p1("GPE _LEF exit")\n 1684 | end; 1685 | 1686 | into method label _LF0 code_regex ([\s\S]*) replace_matched 1687 | begin 1688 | \\rmdt.p1("GPE _LF0 enter")\n 1689 | %1\n 1690 | \\rmdt.p1("GPE _LF0 exit")\n 1691 | end; 1692 | 1693 | into method label _LF1 code_regex ([\s\S]*) replace_matched 1694 | begin 1695 | \\rmdt.p1("GPE _LF1 enter")\n 1696 | %1\n 1697 | \\rmdt.p1("GPE _LF1 exit")\n 1698 | end; 1699 | 1700 | into method label _LF2 code_regex ([\s\S]*) replace_matched 1701 | begin 1702 | \\rmdt.p1("GPE _LF2 enter")\n 1703 | %1\n 1704 | \\rmdt.p1("GPE _LF2 exit")\n 1705 | end; 1706 | 1707 | into method label _LF3 code_regex ([\s\S]*) replace_matched 1708 | begin 1709 | \\rmdt.p1("GPE _LF3 enter")\n 1710 | %1\n 1711 | \\rmdt.p1("GPE _LF3 exit")\n 1712 | end; 1713 | 1714 | into method label _LF4 code_regex ([\s\S]*) replace_matched 1715 | begin 1716 | \\rmdt.p1("GPE _LF4 enter")\n 1717 | %1\n 1718 | \\rmdt.p1("GPE _LF4 exit")\n 1719 | end; 1720 | 1721 | into method label _LF5 code_regex ([\s\S]*) replace_matched 1722 | begin 1723 | \\rmdt.p1("GPE _LF5 enter")\n 1724 | %1\n 1725 | \\rmdt.p1("GPE _LF5 exit")\n 1726 | end; 1727 | 1728 | into method label _LF6 code_regex ([\s\S]*) replace_matched 1729 | begin 1730 | \\rmdt.p1("GPE _LF6 enter")\n 1731 | %1\n 1732 | \\rmdt.p1("GPE _LF6 exit")\n 1733 | end; 1734 | 1735 | into method label _LF7 code_regex ([\s\S]*) replace_matched 1736 | begin 1737 | \\rmdt.p1("GPE _LF7 enter")\n 1738 | %1\n 1739 | \\rmdt.p1("GPE _LF7 exit")\n 1740 | end; 1741 | 1742 | into method label _LF8 code_regex ([\s\S]*) replace_matched 1743 | begin 1744 | \\rmdt.p1("GPE _LF8 enter")\n 1745 | %1\n 1746 | \\rmdt.p1("GPE _LF8 exit")\n 1747 | end; 1748 | 1749 | into method label _LF9 code_regex ([\s\S]*) replace_matched 1750 | begin 1751 | \\rmdt.p1("GPE _LF9 enter")\n 1752 | %1\n 1753 | \\rmdt.p1("GPE _LF9 exit")\n 1754 | end; 1755 | 1756 | into method label _LFA code_regex ([\s\S]*) replace_matched 1757 | begin 1758 | \\rmdt.p1("GPE _LFA enter")\n 1759 | %1\n 1760 | \\rmdt.p1("GPE _LFA exit")\n 1761 | end; 1762 | 1763 | into method label _LFB code_regex ([\s\S]*) replace_matched 1764 | begin 1765 | \\rmdt.p1("GPE _LFB enter")\n 1766 | %1\n 1767 | \\rmdt.p1("GPE _LFB exit")\n 1768 | end; 1769 | 1770 | into method label _LFC code_regex ([\s\S]*) replace_matched 1771 | begin 1772 | \\rmdt.p1("GPE _LFC enter")\n 1773 | %1\n 1774 | \\rmdt.p1("GPE _LFC exit")\n 1775 | end; 1776 | 1777 | into method label _LFD code_regex ([\s\S]*) replace_matched 1778 | begin 1779 | \\rmdt.p1("GPE _LFD enter")\n 1780 | %1\n 1781 | \\rmdt.p1("GPE _LFD exit")\n 1782 | end; 1783 | 1784 | into method label _LFE code_regex ([\s\S]*) replace_matched 1785 | begin 1786 | \\rmdt.p1("GPE _LFE enter")\n 1787 | %1\n 1788 | \\rmdt.p1("GPE _LFE exit")\n 1789 | end; 1790 | 1791 | into method label _LFF code_regex ([\s\S]*) replace_matched 1792 | begin 1793 | \\rmdt.p1("GPE _LFF enter")\n 1794 | %1\n 1795 | \\rmdt.p1("GPE _LFF exit")\n 1796 | end; 1797 | 1798 | -------------------------------------------------------------------------------- /instrument_Qxx.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #instrument_Qxx.txt 3 | 4 | # generated by instrument.sh 5 | 6 | into method label _Q00 code_regex ([\s\S]*) replace_matched 7 | begin 8 | \\rmdt.p1("EC _Q00 enter")\n 9 | %1\n 10 | \\rmdt.p1("EC _Q00 exit")\n 11 | end; 12 | 13 | into method label _Q01 code_regex ([\s\S]*) replace_matched 14 | begin 15 | \\rmdt.p1("EC _Q01 enter")\n 16 | %1\n 17 | \\rmdt.p1("EC _Q01 exit")\n 18 | end; 19 | 20 | into method label _Q02 code_regex ([\s\S]*) replace_matched 21 | begin 22 | \\rmdt.p1("EC _Q02 enter")\n 23 | %1\n 24 | \\rmdt.p1("EC _Q02 exit")\n 25 | end; 26 | 27 | into method label _Q03 code_regex ([\s\S]*) replace_matched 28 | begin 29 | \\rmdt.p1("EC _Q03 enter")\n 30 | %1\n 31 | \\rmdt.p1("EC _Q03 exit")\n 32 | end; 33 | 34 | into method label _Q04 code_regex ([\s\S]*) replace_matched 35 | begin 36 | \\rmdt.p1("EC _Q04 enter")\n 37 | %1\n 38 | \\rmdt.p1("EC _Q04 exit")\n 39 | end; 40 | 41 | into method label _Q05 code_regex ([\s\S]*) replace_matched 42 | begin 43 | \\rmdt.p1("EC _Q05 enter")\n 44 | %1\n 45 | \\rmdt.p1("EC _Q05 exit")\n 46 | end; 47 | 48 | into method label _Q06 code_regex ([\s\S]*) replace_matched 49 | begin 50 | \\rmdt.p1("EC _Q06 enter")\n 51 | %1\n 52 | \\rmdt.p1("EC _Q06 exit")\n 53 | end; 54 | 55 | into method label _Q07 code_regex ([\s\S]*) replace_matched 56 | begin 57 | \\rmdt.p1("EC _Q07 enter")\n 58 | %1\n 59 | \\rmdt.p1("EC _Q07 exit")\n 60 | end; 61 | 62 | into method label _Q08 code_regex ([\s\S]*) replace_matched 63 | begin 64 | \\rmdt.p1("EC _Q08 enter")\n 65 | %1\n 66 | \\rmdt.p1("EC _Q08 exit")\n 67 | end; 68 | 69 | into method label _Q09 code_regex ([\s\S]*) replace_matched 70 | begin 71 | \\rmdt.p1("EC _Q09 enter")\n 72 | %1\n 73 | \\rmdt.p1("EC _Q09 exit")\n 74 | end; 75 | 76 | into method label _Q0A code_regex ([\s\S]*) replace_matched 77 | begin 78 | \\rmdt.p1("EC _Q0A enter")\n 79 | %1\n 80 | \\rmdt.p1("EC _Q0A exit")\n 81 | end; 82 | 83 | into method label _Q0B code_regex ([\s\S]*) replace_matched 84 | begin 85 | \\rmdt.p1("EC _Q0B enter")\n 86 | %1\n 87 | \\rmdt.p1("EC _Q0B exit")\n 88 | end; 89 | 90 | into method label _Q0C code_regex ([\s\S]*) replace_matched 91 | begin 92 | \\rmdt.p1("EC _Q0C enter")\n 93 | %1\n 94 | \\rmdt.p1("EC _Q0C exit")\n 95 | end; 96 | 97 | into method label _Q0D code_regex ([\s\S]*) replace_matched 98 | begin 99 | \\rmdt.p1("EC _Q0D enter")\n 100 | %1\n 101 | \\rmdt.p1("EC _Q0D exit")\n 102 | end; 103 | 104 | into method label _Q0E code_regex ([\s\S]*) replace_matched 105 | begin 106 | \\rmdt.p1("EC _Q0E enter")\n 107 | %1\n 108 | \\rmdt.p1("EC _Q0E exit")\n 109 | end; 110 | 111 | into method label _Q0F code_regex ([\s\S]*) replace_matched 112 | begin 113 | \\rmdt.p1("EC _Q0F enter")\n 114 | %1\n 115 | \\rmdt.p1("EC _Q0F exit")\n 116 | end; 117 | 118 | into method label _Q10 code_regex ([\s\S]*) replace_matched 119 | begin 120 | \\rmdt.p1("EC _Q10 enter")\n 121 | %1\n 122 | \\rmdt.p1("EC _Q10 exit")\n 123 | end; 124 | 125 | into method label _Q11 code_regex ([\s\S]*) replace_matched 126 | begin 127 | \\rmdt.p1("EC _Q11 enter")\n 128 | %1\n 129 | \\rmdt.p1("EC _Q11 exit")\n 130 | end; 131 | 132 | into method label _Q12 code_regex ([\s\S]*) replace_matched 133 | begin 134 | \\rmdt.p1("EC _Q12 enter")\n 135 | %1\n 136 | \\rmdt.p1("EC _Q12 exit")\n 137 | end; 138 | 139 | into method label _Q13 code_regex ([\s\S]*) replace_matched 140 | begin 141 | \\rmdt.p1("EC _Q13 enter")\n 142 | %1\n 143 | \\rmdt.p1("EC _Q13 exit")\n 144 | end; 145 | 146 | into method label _Q14 code_regex ([\s\S]*) replace_matched 147 | begin 148 | \\rmdt.p1("EC _Q14 enter")\n 149 | %1\n 150 | \\rmdt.p1("EC _Q14 exit")\n 151 | end; 152 | 153 | into method label _Q15 code_regex ([\s\S]*) replace_matched 154 | begin 155 | \\rmdt.p1("EC _Q15 enter")\n 156 | %1\n 157 | \\rmdt.p1("EC _Q15 exit")\n 158 | end; 159 | 160 | into method label _Q16 code_regex ([\s\S]*) replace_matched 161 | begin 162 | \\rmdt.p1("EC _Q16 enter")\n 163 | %1\n 164 | \\rmdt.p1("EC _Q16 exit")\n 165 | end; 166 | 167 | into method label _Q17 code_regex ([\s\S]*) replace_matched 168 | begin 169 | \\rmdt.p1("EC _Q17 enter")\n 170 | %1\n 171 | \\rmdt.p1("EC _Q17 exit")\n 172 | end; 173 | 174 | into method label _Q18 code_regex ([\s\S]*) replace_matched 175 | begin 176 | \\rmdt.p1("EC _Q18 enter")\n 177 | %1\n 178 | \\rmdt.p1("EC _Q18 exit")\n 179 | end; 180 | 181 | into method label _Q19 code_regex ([\s\S]*) replace_matched 182 | begin 183 | \\rmdt.p1("EC _Q19 enter")\n 184 | %1\n 185 | \\rmdt.p1("EC _Q19 exit")\n 186 | end; 187 | 188 | into method label _Q1A code_regex ([\s\S]*) replace_matched 189 | begin 190 | \\rmdt.p1("EC _Q1A enter")\n 191 | %1\n 192 | \\rmdt.p1("EC _Q1A exit")\n 193 | end; 194 | 195 | into method label _Q1B code_regex ([\s\S]*) replace_matched 196 | begin 197 | \\rmdt.p1("EC _Q1B enter")\n 198 | %1\n 199 | \\rmdt.p1("EC _Q1B exit")\n 200 | end; 201 | 202 | into method label _Q1C code_regex ([\s\S]*) replace_matched 203 | begin 204 | \\rmdt.p1("EC _Q1C enter")\n 205 | %1\n 206 | \\rmdt.p1("EC _Q1C exit")\n 207 | end; 208 | 209 | into method label _Q1D code_regex ([\s\S]*) replace_matched 210 | begin 211 | \\rmdt.p1("EC _Q1D enter")\n 212 | %1\n 213 | \\rmdt.p1("EC _Q1D exit")\n 214 | end; 215 | 216 | into method label _Q1E code_regex ([\s\S]*) replace_matched 217 | begin 218 | \\rmdt.p1("EC _Q1E enter")\n 219 | %1\n 220 | \\rmdt.p1("EC _Q1E exit")\n 221 | end; 222 | 223 | into method label _Q1F code_regex ([\s\S]*) replace_matched 224 | begin 225 | \\rmdt.p1("EC _Q1F enter")\n 226 | %1\n 227 | \\rmdt.p1("EC _Q1F exit")\n 228 | end; 229 | 230 | into method label _Q20 code_regex ([\s\S]*) replace_matched 231 | begin 232 | \\rmdt.p1("EC _Q20 enter")\n 233 | %1\n 234 | \\rmdt.p1("EC _Q20 exit")\n 235 | end; 236 | 237 | into method label _Q21 code_regex ([\s\S]*) replace_matched 238 | begin 239 | \\rmdt.p1("EC _Q21 enter")\n 240 | %1\n 241 | \\rmdt.p1("EC _Q21 exit")\n 242 | end; 243 | 244 | into method label _Q22 code_regex ([\s\S]*) replace_matched 245 | begin 246 | \\rmdt.p1("EC _Q22 enter")\n 247 | %1\n 248 | \\rmdt.p1("EC _Q22 exit")\n 249 | end; 250 | 251 | into method label _Q23 code_regex ([\s\S]*) replace_matched 252 | begin 253 | \\rmdt.p1("EC _Q23 enter")\n 254 | %1\n 255 | \\rmdt.p1("EC _Q23 exit")\n 256 | end; 257 | 258 | into method label _Q24 code_regex ([\s\S]*) replace_matched 259 | begin 260 | \\rmdt.p1("EC _Q24 enter")\n 261 | %1\n 262 | \\rmdt.p1("EC _Q24 exit")\n 263 | end; 264 | 265 | into method label _Q25 code_regex ([\s\S]*) replace_matched 266 | begin 267 | \\rmdt.p1("EC _Q25 enter")\n 268 | %1\n 269 | \\rmdt.p1("EC _Q25 exit")\n 270 | end; 271 | 272 | into method label _Q26 code_regex ([\s\S]*) replace_matched 273 | begin 274 | \\rmdt.p1("EC _Q26 enter")\n 275 | %1\n 276 | \\rmdt.p1("EC _Q26 exit")\n 277 | end; 278 | 279 | into method label _Q27 code_regex ([\s\S]*) replace_matched 280 | begin 281 | \\rmdt.p1("EC _Q27 enter")\n 282 | %1\n 283 | \\rmdt.p1("EC _Q27 exit")\n 284 | end; 285 | 286 | into method label _Q28 code_regex ([\s\S]*) replace_matched 287 | begin 288 | \\rmdt.p1("EC _Q28 enter")\n 289 | %1\n 290 | \\rmdt.p1("EC _Q28 exit")\n 291 | end; 292 | 293 | into method label _Q29 code_regex ([\s\S]*) replace_matched 294 | begin 295 | \\rmdt.p1("EC _Q29 enter")\n 296 | %1\n 297 | \\rmdt.p1("EC _Q29 exit")\n 298 | end; 299 | 300 | into method label _Q2A code_regex ([\s\S]*) replace_matched 301 | begin 302 | \\rmdt.p1("EC _Q2A enter")\n 303 | %1\n 304 | \\rmdt.p1("EC _Q2A exit")\n 305 | end; 306 | 307 | into method label _Q2B code_regex ([\s\S]*) replace_matched 308 | begin 309 | \\rmdt.p1("EC _Q2B enter")\n 310 | %1\n 311 | \\rmdt.p1("EC _Q2B exit")\n 312 | end; 313 | 314 | into method label _Q2C code_regex ([\s\S]*) replace_matched 315 | begin 316 | \\rmdt.p1("EC _Q2C enter")\n 317 | %1\n 318 | \\rmdt.p1("EC _Q2C exit")\n 319 | end; 320 | 321 | into method label _Q2D code_regex ([\s\S]*) replace_matched 322 | begin 323 | \\rmdt.p1("EC _Q2D enter")\n 324 | %1\n 325 | \\rmdt.p1("EC _Q2D exit")\n 326 | end; 327 | 328 | into method label _Q2E code_regex ([\s\S]*) replace_matched 329 | begin 330 | \\rmdt.p1("EC _Q2E enter")\n 331 | %1\n 332 | \\rmdt.p1("EC _Q2E exit")\n 333 | end; 334 | 335 | into method label _Q2F code_regex ([\s\S]*) replace_matched 336 | begin 337 | \\rmdt.p1("EC _Q2F enter")\n 338 | %1\n 339 | \\rmdt.p1("EC _Q2F exit")\n 340 | end; 341 | 342 | into method label _Q30 code_regex ([\s\S]*) replace_matched 343 | begin 344 | \\rmdt.p1("EC _Q30 enter")\n 345 | %1\n 346 | \\rmdt.p1("EC _Q30 exit")\n 347 | end; 348 | 349 | into method label _Q31 code_regex ([\s\S]*) replace_matched 350 | begin 351 | \\rmdt.p1("EC _Q31 enter")\n 352 | %1\n 353 | \\rmdt.p1("EC _Q31 exit")\n 354 | end; 355 | 356 | into method label _Q32 code_regex ([\s\S]*) replace_matched 357 | begin 358 | \\rmdt.p1("EC _Q32 enter")\n 359 | %1\n 360 | \\rmdt.p1("EC _Q32 exit")\n 361 | end; 362 | 363 | into method label _Q33 code_regex ([\s\S]*) replace_matched 364 | begin 365 | \\rmdt.p1("EC _Q33 enter")\n 366 | %1\n 367 | \\rmdt.p1("EC _Q33 exit")\n 368 | end; 369 | 370 | into method label _Q34 code_regex ([\s\S]*) replace_matched 371 | begin 372 | \\rmdt.p1("EC _Q34 enter")\n 373 | %1\n 374 | \\rmdt.p1("EC _Q34 exit")\n 375 | end; 376 | 377 | into method label _Q35 code_regex ([\s\S]*) replace_matched 378 | begin 379 | \\rmdt.p1("EC _Q35 enter")\n 380 | %1\n 381 | \\rmdt.p1("EC _Q35 exit")\n 382 | end; 383 | 384 | into method label _Q36 code_regex ([\s\S]*) replace_matched 385 | begin 386 | \\rmdt.p1("EC _Q36 enter")\n 387 | %1\n 388 | \\rmdt.p1("EC _Q36 exit")\n 389 | end; 390 | 391 | into method label _Q37 code_regex ([\s\S]*) replace_matched 392 | begin 393 | \\rmdt.p1("EC _Q37 enter")\n 394 | %1\n 395 | \\rmdt.p1("EC _Q37 exit")\n 396 | end; 397 | 398 | into method label _Q38 code_regex ([\s\S]*) replace_matched 399 | begin 400 | \\rmdt.p1("EC _Q38 enter")\n 401 | %1\n 402 | \\rmdt.p1("EC _Q38 exit")\n 403 | end; 404 | 405 | into method label _Q39 code_regex ([\s\S]*) replace_matched 406 | begin 407 | \\rmdt.p1("EC _Q39 enter")\n 408 | %1\n 409 | \\rmdt.p1("EC _Q39 exit")\n 410 | end; 411 | 412 | into method label _Q3A code_regex ([\s\S]*) replace_matched 413 | begin 414 | \\rmdt.p1("EC _Q3A enter")\n 415 | %1\n 416 | \\rmdt.p1("EC _Q3A exit")\n 417 | end; 418 | 419 | into method label _Q3B code_regex ([\s\S]*) replace_matched 420 | begin 421 | \\rmdt.p1("EC _Q3B enter")\n 422 | %1\n 423 | \\rmdt.p1("EC _Q3B exit")\n 424 | end; 425 | 426 | into method label _Q3C code_regex ([\s\S]*) replace_matched 427 | begin 428 | \\rmdt.p1("EC _Q3C enter")\n 429 | %1\n 430 | \\rmdt.p1("EC _Q3C exit")\n 431 | end; 432 | 433 | into method label _Q3D code_regex ([\s\S]*) replace_matched 434 | begin 435 | \\rmdt.p1("EC _Q3D enter")\n 436 | %1\n 437 | \\rmdt.p1("EC _Q3D exit")\n 438 | end; 439 | 440 | into method label _Q3E code_regex ([\s\S]*) replace_matched 441 | begin 442 | \\rmdt.p1("EC _Q3E enter")\n 443 | %1\n 444 | \\rmdt.p1("EC _Q3E exit")\n 445 | end; 446 | 447 | into method label _Q3F code_regex ([\s\S]*) replace_matched 448 | begin 449 | \\rmdt.p1("EC _Q3F enter")\n 450 | %1\n 451 | \\rmdt.p1("EC _Q3F exit")\n 452 | end; 453 | 454 | into method label _Q40 code_regex ([\s\S]*) replace_matched 455 | begin 456 | \\rmdt.p1("EC _Q40 enter")\n 457 | %1\n 458 | \\rmdt.p1("EC _Q40 exit")\n 459 | end; 460 | 461 | into method label _Q41 code_regex ([\s\S]*) replace_matched 462 | begin 463 | \\rmdt.p1("EC _Q41 enter")\n 464 | %1\n 465 | \\rmdt.p1("EC _Q41 exit")\n 466 | end; 467 | 468 | into method label _Q42 code_regex ([\s\S]*) replace_matched 469 | begin 470 | \\rmdt.p1("EC _Q42 enter")\n 471 | %1\n 472 | \\rmdt.p1("EC _Q42 exit")\n 473 | end; 474 | 475 | into method label _Q43 code_regex ([\s\S]*) replace_matched 476 | begin 477 | \\rmdt.p1("EC _Q43 enter")\n 478 | %1\n 479 | \\rmdt.p1("EC _Q43 exit")\n 480 | end; 481 | 482 | into method label _Q44 code_regex ([\s\S]*) replace_matched 483 | begin 484 | \\rmdt.p1("EC _Q44 enter")\n 485 | %1\n 486 | \\rmdt.p1("EC _Q44 exit")\n 487 | end; 488 | 489 | into method label _Q45 code_regex ([\s\S]*) replace_matched 490 | begin 491 | \\rmdt.p1("EC _Q45 enter")\n 492 | %1\n 493 | \\rmdt.p1("EC _Q45 exit")\n 494 | end; 495 | 496 | into method label _Q46 code_regex ([\s\S]*) replace_matched 497 | begin 498 | \\rmdt.p1("EC _Q46 enter")\n 499 | %1\n 500 | \\rmdt.p1("EC _Q46 exit")\n 501 | end; 502 | 503 | into method label _Q47 code_regex ([\s\S]*) replace_matched 504 | begin 505 | \\rmdt.p1("EC _Q47 enter")\n 506 | %1\n 507 | \\rmdt.p1("EC _Q47 exit")\n 508 | end; 509 | 510 | into method label _Q48 code_regex ([\s\S]*) replace_matched 511 | begin 512 | \\rmdt.p1("EC _Q48 enter")\n 513 | %1\n 514 | \\rmdt.p1("EC _Q48 exit")\n 515 | end; 516 | 517 | into method label _Q49 code_regex ([\s\S]*) replace_matched 518 | begin 519 | \\rmdt.p1("EC _Q49 enter")\n 520 | %1\n 521 | \\rmdt.p1("EC _Q49 exit")\n 522 | end; 523 | 524 | into method label _Q4A code_regex ([\s\S]*) replace_matched 525 | begin 526 | \\rmdt.p1("EC _Q4A enter")\n 527 | %1\n 528 | \\rmdt.p1("EC _Q4A exit")\n 529 | end; 530 | 531 | into method label _Q4B code_regex ([\s\S]*) replace_matched 532 | begin 533 | \\rmdt.p1("EC _Q4B enter")\n 534 | %1\n 535 | \\rmdt.p1("EC _Q4B exit")\n 536 | end; 537 | 538 | into method label _Q4C code_regex ([\s\S]*) replace_matched 539 | begin 540 | \\rmdt.p1("EC _Q4C enter")\n 541 | %1\n 542 | \\rmdt.p1("EC _Q4C exit")\n 543 | end; 544 | 545 | into method label _Q4D code_regex ([\s\S]*) replace_matched 546 | begin 547 | \\rmdt.p1("EC _Q4D enter")\n 548 | %1\n 549 | \\rmdt.p1("EC _Q4D exit")\n 550 | end; 551 | 552 | into method label _Q4E code_regex ([\s\S]*) replace_matched 553 | begin 554 | \\rmdt.p1("EC _Q4E enter")\n 555 | %1\n 556 | \\rmdt.p1("EC _Q4E exit")\n 557 | end; 558 | 559 | into method label _Q4F code_regex ([\s\S]*) replace_matched 560 | begin 561 | \\rmdt.p1("EC _Q4F enter")\n 562 | %1\n 563 | \\rmdt.p1("EC _Q4F exit")\n 564 | end; 565 | 566 | into method label _Q50 code_regex ([\s\S]*) replace_matched 567 | begin 568 | \\rmdt.p1("EC _Q50 enter")\n 569 | %1\n 570 | \\rmdt.p1("EC _Q50 exit")\n 571 | end; 572 | 573 | into method label _Q51 code_regex ([\s\S]*) replace_matched 574 | begin 575 | \\rmdt.p1("EC _Q51 enter")\n 576 | %1\n 577 | \\rmdt.p1("EC _Q51 exit")\n 578 | end; 579 | 580 | into method label _Q52 code_regex ([\s\S]*) replace_matched 581 | begin 582 | \\rmdt.p1("EC _Q52 enter")\n 583 | %1\n 584 | \\rmdt.p1("EC _Q52 exit")\n 585 | end; 586 | 587 | into method label _Q53 code_regex ([\s\S]*) replace_matched 588 | begin 589 | \\rmdt.p1("EC _Q53 enter")\n 590 | %1\n 591 | \\rmdt.p1("EC _Q53 exit")\n 592 | end; 593 | 594 | into method label _Q54 code_regex ([\s\S]*) replace_matched 595 | begin 596 | \\rmdt.p1("EC _Q54 enter")\n 597 | %1\n 598 | \\rmdt.p1("EC _Q54 exit")\n 599 | end; 600 | 601 | into method label _Q55 code_regex ([\s\S]*) replace_matched 602 | begin 603 | \\rmdt.p1("EC _Q55 enter")\n 604 | %1\n 605 | \\rmdt.p1("EC _Q55 exit")\n 606 | end; 607 | 608 | into method label _Q56 code_regex ([\s\S]*) replace_matched 609 | begin 610 | \\rmdt.p1("EC _Q56 enter")\n 611 | %1\n 612 | \\rmdt.p1("EC _Q56 exit")\n 613 | end; 614 | 615 | into method label _Q57 code_regex ([\s\S]*) replace_matched 616 | begin 617 | \\rmdt.p1("EC _Q57 enter")\n 618 | %1\n 619 | \\rmdt.p1("EC _Q57 exit")\n 620 | end; 621 | 622 | into method label _Q58 code_regex ([\s\S]*) replace_matched 623 | begin 624 | \\rmdt.p1("EC _Q58 enter")\n 625 | %1\n 626 | \\rmdt.p1("EC _Q58 exit")\n 627 | end; 628 | 629 | into method label _Q59 code_regex ([\s\S]*) replace_matched 630 | begin 631 | \\rmdt.p1("EC _Q59 enter")\n 632 | %1\n 633 | \\rmdt.p1("EC _Q59 exit")\n 634 | end; 635 | 636 | into method label _Q5A code_regex ([\s\S]*) replace_matched 637 | begin 638 | \\rmdt.p1("EC _Q5A enter")\n 639 | %1\n 640 | \\rmdt.p1("EC _Q5A exit")\n 641 | end; 642 | 643 | into method label _Q5B code_regex ([\s\S]*) replace_matched 644 | begin 645 | \\rmdt.p1("EC _Q5B enter")\n 646 | %1\n 647 | \\rmdt.p1("EC _Q5B exit")\n 648 | end; 649 | 650 | into method label _Q5C code_regex ([\s\S]*) replace_matched 651 | begin 652 | \\rmdt.p1("EC _Q5C enter")\n 653 | %1\n 654 | \\rmdt.p1("EC _Q5C exit")\n 655 | end; 656 | 657 | into method label _Q5D code_regex ([\s\S]*) replace_matched 658 | begin 659 | \\rmdt.p1("EC _Q5D enter")\n 660 | %1\n 661 | \\rmdt.p1("EC _Q5D exit")\n 662 | end; 663 | 664 | into method label _Q5E code_regex ([\s\S]*) replace_matched 665 | begin 666 | \\rmdt.p1("EC _Q5E enter")\n 667 | %1\n 668 | \\rmdt.p1("EC _Q5E exit")\n 669 | end; 670 | 671 | into method label _Q5F code_regex ([\s\S]*) replace_matched 672 | begin 673 | \\rmdt.p1("EC _Q5F enter")\n 674 | %1\n 675 | \\rmdt.p1("EC _Q5F exit")\n 676 | end; 677 | 678 | into method label _Q60 code_regex ([\s\S]*) replace_matched 679 | begin 680 | \\rmdt.p1("EC _Q60 enter")\n 681 | %1\n 682 | \\rmdt.p1("EC _Q60 exit")\n 683 | end; 684 | 685 | into method label _Q61 code_regex ([\s\S]*) replace_matched 686 | begin 687 | \\rmdt.p1("EC _Q61 enter")\n 688 | %1\n 689 | \\rmdt.p1("EC _Q61 exit")\n 690 | end; 691 | 692 | into method label _Q62 code_regex ([\s\S]*) replace_matched 693 | begin 694 | \\rmdt.p1("EC _Q62 enter")\n 695 | %1\n 696 | \\rmdt.p1("EC _Q62 exit")\n 697 | end; 698 | 699 | into method label _Q63 code_regex ([\s\S]*) replace_matched 700 | begin 701 | \\rmdt.p1("EC _Q63 enter")\n 702 | %1\n 703 | \\rmdt.p1("EC _Q63 exit")\n 704 | end; 705 | 706 | into method label _Q64 code_regex ([\s\S]*) replace_matched 707 | begin 708 | \\rmdt.p1("EC _Q64 enter")\n 709 | %1\n 710 | \\rmdt.p1("EC _Q64 exit")\n 711 | end; 712 | 713 | into method label _Q65 code_regex ([\s\S]*) replace_matched 714 | begin 715 | \\rmdt.p1("EC _Q65 enter")\n 716 | %1\n 717 | \\rmdt.p1("EC _Q65 exit")\n 718 | end; 719 | 720 | into method label _Q66 code_regex ([\s\S]*) replace_matched 721 | begin 722 | \\rmdt.p1("EC _Q66 enter")\n 723 | %1\n 724 | \\rmdt.p1("EC _Q66 exit")\n 725 | end; 726 | 727 | into method label _Q67 code_regex ([\s\S]*) replace_matched 728 | begin 729 | \\rmdt.p1("EC _Q67 enter")\n 730 | %1\n 731 | \\rmdt.p1("EC _Q67 exit")\n 732 | end; 733 | 734 | into method label _Q68 code_regex ([\s\S]*) replace_matched 735 | begin 736 | \\rmdt.p1("EC _Q68 enter")\n 737 | %1\n 738 | \\rmdt.p1("EC _Q68 exit")\n 739 | end; 740 | 741 | into method label _Q69 code_regex ([\s\S]*) replace_matched 742 | begin 743 | \\rmdt.p1("EC _Q69 enter")\n 744 | %1\n 745 | \\rmdt.p1("EC _Q69 exit")\n 746 | end; 747 | 748 | into method label _Q6A code_regex ([\s\S]*) replace_matched 749 | begin 750 | \\rmdt.p1("EC _Q6A enter")\n 751 | %1\n 752 | \\rmdt.p1("EC _Q6A exit")\n 753 | end; 754 | 755 | into method label _Q6B code_regex ([\s\S]*) replace_matched 756 | begin 757 | \\rmdt.p1("EC _Q6B enter")\n 758 | %1\n 759 | \\rmdt.p1("EC _Q6B exit")\n 760 | end; 761 | 762 | into method label _Q6C code_regex ([\s\S]*) replace_matched 763 | begin 764 | \\rmdt.p1("EC _Q6C enter")\n 765 | %1\n 766 | \\rmdt.p1("EC _Q6C exit")\n 767 | end; 768 | 769 | into method label _Q6D code_regex ([\s\S]*) replace_matched 770 | begin 771 | \\rmdt.p1("EC _Q6D enter")\n 772 | %1\n 773 | \\rmdt.p1("EC _Q6D exit")\n 774 | end; 775 | 776 | into method label _Q6E code_regex ([\s\S]*) replace_matched 777 | begin 778 | \\rmdt.p1("EC _Q6E enter")\n 779 | %1\n 780 | \\rmdt.p1("EC _Q6E exit")\n 781 | end; 782 | 783 | into method label _Q6F code_regex ([\s\S]*) replace_matched 784 | begin 785 | \\rmdt.p1("EC _Q6F enter")\n 786 | %1\n 787 | \\rmdt.p1("EC _Q6F exit")\n 788 | end; 789 | 790 | into method label _Q70 code_regex ([\s\S]*) replace_matched 791 | begin 792 | \\rmdt.p1("EC _Q70 enter")\n 793 | %1\n 794 | \\rmdt.p1("EC _Q70 exit")\n 795 | end; 796 | 797 | into method label _Q71 code_regex ([\s\S]*) replace_matched 798 | begin 799 | \\rmdt.p1("EC _Q71 enter")\n 800 | %1\n 801 | \\rmdt.p1("EC _Q71 exit")\n 802 | end; 803 | 804 | into method label _Q72 code_regex ([\s\S]*) replace_matched 805 | begin 806 | \\rmdt.p1("EC _Q72 enter")\n 807 | %1\n 808 | \\rmdt.p1("EC _Q72 exit")\n 809 | end; 810 | 811 | into method label _Q73 code_regex ([\s\S]*) replace_matched 812 | begin 813 | \\rmdt.p1("EC _Q73 enter")\n 814 | %1\n 815 | \\rmdt.p1("EC _Q73 exit")\n 816 | end; 817 | 818 | into method label _Q74 code_regex ([\s\S]*) replace_matched 819 | begin 820 | \\rmdt.p1("EC _Q74 enter")\n 821 | %1\n 822 | \\rmdt.p1("EC _Q74 exit")\n 823 | end; 824 | 825 | into method label _Q75 code_regex ([\s\S]*) replace_matched 826 | begin 827 | \\rmdt.p1("EC _Q75 enter")\n 828 | %1\n 829 | \\rmdt.p1("EC _Q75 exit")\n 830 | end; 831 | 832 | into method label _Q76 code_regex ([\s\S]*) replace_matched 833 | begin 834 | \\rmdt.p1("EC _Q76 enter")\n 835 | %1\n 836 | \\rmdt.p1("EC _Q76 exit")\n 837 | end; 838 | 839 | into method label _Q77 code_regex ([\s\S]*) replace_matched 840 | begin 841 | \\rmdt.p1("EC _Q77 enter")\n 842 | %1\n 843 | \\rmdt.p1("EC _Q77 exit")\n 844 | end; 845 | 846 | into method label _Q78 code_regex ([\s\S]*) replace_matched 847 | begin 848 | \\rmdt.p1("EC _Q78 enter")\n 849 | %1\n 850 | \\rmdt.p1("EC _Q78 exit")\n 851 | end; 852 | 853 | into method label _Q79 code_regex ([\s\S]*) replace_matched 854 | begin 855 | \\rmdt.p1("EC _Q79 enter")\n 856 | %1\n 857 | \\rmdt.p1("EC _Q79 exit")\n 858 | end; 859 | 860 | into method label _Q7A code_regex ([\s\S]*) replace_matched 861 | begin 862 | \\rmdt.p1("EC _Q7A enter")\n 863 | %1\n 864 | \\rmdt.p1("EC _Q7A exit")\n 865 | end; 866 | 867 | into method label _Q7B code_regex ([\s\S]*) replace_matched 868 | begin 869 | \\rmdt.p1("EC _Q7B enter")\n 870 | %1\n 871 | \\rmdt.p1("EC _Q7B exit")\n 872 | end; 873 | 874 | into method label _Q7C code_regex ([\s\S]*) replace_matched 875 | begin 876 | \\rmdt.p1("EC _Q7C enter")\n 877 | %1\n 878 | \\rmdt.p1("EC _Q7C exit")\n 879 | end; 880 | 881 | into method label _Q7D code_regex ([\s\S]*) replace_matched 882 | begin 883 | \\rmdt.p1("EC _Q7D enter")\n 884 | %1\n 885 | \\rmdt.p1("EC _Q7D exit")\n 886 | end; 887 | 888 | into method label _Q7E code_regex ([\s\S]*) replace_matched 889 | begin 890 | \\rmdt.p1("EC _Q7E enter")\n 891 | %1\n 892 | \\rmdt.p1("EC _Q7E exit")\n 893 | end; 894 | 895 | into method label _Q7F code_regex ([\s\S]*) replace_matched 896 | begin 897 | \\rmdt.p1("EC _Q7F enter")\n 898 | %1\n 899 | \\rmdt.p1("EC _Q7F exit")\n 900 | end; 901 | 902 | into method label _Q80 code_regex ([\s\S]*) replace_matched 903 | begin 904 | \\rmdt.p1("EC _Q80 enter")\n 905 | %1\n 906 | \\rmdt.p1("EC _Q80 exit")\n 907 | end; 908 | 909 | into method label _Q81 code_regex ([\s\S]*) replace_matched 910 | begin 911 | \\rmdt.p1("EC _Q81 enter")\n 912 | %1\n 913 | \\rmdt.p1("EC _Q81 exit")\n 914 | end; 915 | 916 | into method label _Q82 code_regex ([\s\S]*) replace_matched 917 | begin 918 | \\rmdt.p1("EC _Q82 enter")\n 919 | %1\n 920 | \\rmdt.p1("EC _Q82 exit")\n 921 | end; 922 | 923 | into method label _Q83 code_regex ([\s\S]*) replace_matched 924 | begin 925 | \\rmdt.p1("EC _Q83 enter")\n 926 | %1\n 927 | \\rmdt.p1("EC _Q83 exit")\n 928 | end; 929 | 930 | into method label _Q84 code_regex ([\s\S]*) replace_matched 931 | begin 932 | \\rmdt.p1("EC _Q84 enter")\n 933 | %1\n 934 | \\rmdt.p1("EC _Q84 exit")\n 935 | end; 936 | 937 | into method label _Q85 code_regex ([\s\S]*) replace_matched 938 | begin 939 | \\rmdt.p1("EC _Q85 enter")\n 940 | %1\n 941 | \\rmdt.p1("EC _Q85 exit")\n 942 | end; 943 | 944 | into method label _Q86 code_regex ([\s\S]*) replace_matched 945 | begin 946 | \\rmdt.p1("EC _Q86 enter")\n 947 | %1\n 948 | \\rmdt.p1("EC _Q86 exit")\n 949 | end; 950 | 951 | into method label _Q87 code_regex ([\s\S]*) replace_matched 952 | begin 953 | \\rmdt.p1("EC _Q87 enter")\n 954 | %1\n 955 | \\rmdt.p1("EC _Q87 exit")\n 956 | end; 957 | 958 | into method label _Q88 code_regex ([\s\S]*) replace_matched 959 | begin 960 | \\rmdt.p1("EC _Q88 enter")\n 961 | %1\n 962 | \\rmdt.p1("EC _Q88 exit")\n 963 | end; 964 | 965 | into method label _Q89 code_regex ([\s\S]*) replace_matched 966 | begin 967 | \\rmdt.p1("EC _Q89 enter")\n 968 | %1\n 969 | \\rmdt.p1("EC _Q89 exit")\n 970 | end; 971 | 972 | into method label _Q8A code_regex ([\s\S]*) replace_matched 973 | begin 974 | \\rmdt.p1("EC _Q8A enter")\n 975 | %1\n 976 | \\rmdt.p1("EC _Q8A exit")\n 977 | end; 978 | 979 | into method label _Q8B code_regex ([\s\S]*) replace_matched 980 | begin 981 | \\rmdt.p1("EC _Q8B enter")\n 982 | %1\n 983 | \\rmdt.p1("EC _Q8B exit")\n 984 | end; 985 | 986 | into method label _Q8C code_regex ([\s\S]*) replace_matched 987 | begin 988 | \\rmdt.p1("EC _Q8C enter")\n 989 | %1\n 990 | \\rmdt.p1("EC _Q8C exit")\n 991 | end; 992 | 993 | into method label _Q8D code_regex ([\s\S]*) replace_matched 994 | begin 995 | \\rmdt.p1("EC _Q8D enter")\n 996 | %1\n 997 | \\rmdt.p1("EC _Q8D exit")\n 998 | end; 999 | 1000 | into method label _Q8E code_regex ([\s\S]*) replace_matched 1001 | begin 1002 | \\rmdt.p1("EC _Q8E enter")\n 1003 | %1\n 1004 | \\rmdt.p1("EC _Q8E exit")\n 1005 | end; 1006 | 1007 | into method label _Q8F code_regex ([\s\S]*) replace_matched 1008 | begin 1009 | \\rmdt.p1("EC _Q8F enter")\n 1010 | %1\n 1011 | \\rmdt.p1("EC _Q8F exit")\n 1012 | end; 1013 | 1014 | into method label _Q90 code_regex ([\s\S]*) replace_matched 1015 | begin 1016 | \\rmdt.p1("EC _Q90 enter")\n 1017 | %1\n 1018 | \\rmdt.p1("EC _Q90 exit")\n 1019 | end; 1020 | 1021 | into method label _Q91 code_regex ([\s\S]*) replace_matched 1022 | begin 1023 | \\rmdt.p1("EC _Q91 enter")\n 1024 | %1\n 1025 | \\rmdt.p1("EC _Q91 exit")\n 1026 | end; 1027 | 1028 | into method label _Q92 code_regex ([\s\S]*) replace_matched 1029 | begin 1030 | \\rmdt.p1("EC _Q92 enter")\n 1031 | %1\n 1032 | \\rmdt.p1("EC _Q92 exit")\n 1033 | end; 1034 | 1035 | into method label _Q93 code_regex ([\s\S]*) replace_matched 1036 | begin 1037 | \\rmdt.p1("EC _Q93 enter")\n 1038 | %1\n 1039 | \\rmdt.p1("EC _Q93 exit")\n 1040 | end; 1041 | 1042 | into method label _Q94 code_regex ([\s\S]*) replace_matched 1043 | begin 1044 | \\rmdt.p1("EC _Q94 enter")\n 1045 | %1\n 1046 | \\rmdt.p1("EC _Q94 exit")\n 1047 | end; 1048 | 1049 | into method label _Q95 code_regex ([\s\S]*) replace_matched 1050 | begin 1051 | \\rmdt.p1("EC _Q95 enter")\n 1052 | %1\n 1053 | \\rmdt.p1("EC _Q95 exit")\n 1054 | end; 1055 | 1056 | into method label _Q96 code_regex ([\s\S]*) replace_matched 1057 | begin 1058 | \\rmdt.p1("EC _Q96 enter")\n 1059 | %1\n 1060 | \\rmdt.p1("EC _Q96 exit")\n 1061 | end; 1062 | 1063 | into method label _Q97 code_regex ([\s\S]*) replace_matched 1064 | begin 1065 | \\rmdt.p1("EC _Q97 enter")\n 1066 | %1\n 1067 | \\rmdt.p1("EC _Q97 exit")\n 1068 | end; 1069 | 1070 | into method label _Q98 code_regex ([\s\S]*) replace_matched 1071 | begin 1072 | \\rmdt.p1("EC _Q98 enter")\n 1073 | %1\n 1074 | \\rmdt.p1("EC _Q98 exit")\n 1075 | end; 1076 | 1077 | into method label _Q99 code_regex ([\s\S]*) replace_matched 1078 | begin 1079 | \\rmdt.p1("EC _Q99 enter")\n 1080 | %1\n 1081 | \\rmdt.p1("EC _Q99 exit")\n 1082 | end; 1083 | 1084 | into method label _Q9A code_regex ([\s\S]*) replace_matched 1085 | begin 1086 | \\rmdt.p1("EC _Q9A enter")\n 1087 | %1\n 1088 | \\rmdt.p1("EC _Q9A exit")\n 1089 | end; 1090 | 1091 | into method label _Q9B code_regex ([\s\S]*) replace_matched 1092 | begin 1093 | \\rmdt.p1("EC _Q9B enter")\n 1094 | %1\n 1095 | \\rmdt.p1("EC _Q9B exit")\n 1096 | end; 1097 | 1098 | into method label _Q9C code_regex ([\s\S]*) replace_matched 1099 | begin 1100 | \\rmdt.p1("EC _Q9C enter")\n 1101 | %1\n 1102 | \\rmdt.p1("EC _Q9C exit")\n 1103 | end; 1104 | 1105 | into method label _Q9D code_regex ([\s\S]*) replace_matched 1106 | begin 1107 | \\rmdt.p1("EC _Q9D enter")\n 1108 | %1\n 1109 | \\rmdt.p1("EC _Q9D exit")\n 1110 | end; 1111 | 1112 | into method label _Q9E code_regex ([\s\S]*) replace_matched 1113 | begin 1114 | \\rmdt.p1("EC _Q9E enter")\n 1115 | %1\n 1116 | \\rmdt.p1("EC _Q9E exit")\n 1117 | end; 1118 | 1119 | into method label _Q9F code_regex ([\s\S]*) replace_matched 1120 | begin 1121 | \\rmdt.p1("EC _Q9F enter")\n 1122 | %1\n 1123 | \\rmdt.p1("EC _Q9F exit")\n 1124 | end; 1125 | 1126 | into method label _QA0 code_regex ([\s\S]*) replace_matched 1127 | begin 1128 | \\rmdt.p1("EC _QA0 enter")\n 1129 | %1\n 1130 | \\rmdt.p1("EC _QA0 exit")\n 1131 | end; 1132 | 1133 | into method label _QA1 code_regex ([\s\S]*) replace_matched 1134 | begin 1135 | \\rmdt.p1("EC _QA1 enter")\n 1136 | %1\n 1137 | \\rmdt.p1("EC _QA1 exit")\n 1138 | end; 1139 | 1140 | into method label _QA2 code_regex ([\s\S]*) replace_matched 1141 | begin 1142 | \\rmdt.p1("EC _QA2 enter")\n 1143 | %1\n 1144 | \\rmdt.p1("EC _QA2 exit")\n 1145 | end; 1146 | 1147 | into method label _QA3 code_regex ([\s\S]*) replace_matched 1148 | begin 1149 | \\rmdt.p1("EC _QA3 enter")\n 1150 | %1\n 1151 | \\rmdt.p1("EC _QA3 exit")\n 1152 | end; 1153 | 1154 | into method label _QA4 code_regex ([\s\S]*) replace_matched 1155 | begin 1156 | \\rmdt.p1("EC _QA4 enter")\n 1157 | %1\n 1158 | \\rmdt.p1("EC _QA4 exit")\n 1159 | end; 1160 | 1161 | into method label _QA5 code_regex ([\s\S]*) replace_matched 1162 | begin 1163 | \\rmdt.p1("EC _QA5 enter")\n 1164 | %1\n 1165 | \\rmdt.p1("EC _QA5 exit")\n 1166 | end; 1167 | 1168 | into method label _QA6 code_regex ([\s\S]*) replace_matched 1169 | begin 1170 | \\rmdt.p1("EC _QA6 enter")\n 1171 | %1\n 1172 | \\rmdt.p1("EC _QA6 exit")\n 1173 | end; 1174 | 1175 | into method label _QA7 code_regex ([\s\S]*) replace_matched 1176 | begin 1177 | \\rmdt.p1("EC _QA7 enter")\n 1178 | %1\n 1179 | \\rmdt.p1("EC _QA7 exit")\n 1180 | end; 1181 | 1182 | into method label _QA8 code_regex ([\s\S]*) replace_matched 1183 | begin 1184 | \\rmdt.p1("EC _QA8 enter")\n 1185 | %1\n 1186 | \\rmdt.p1("EC _QA8 exit")\n 1187 | end; 1188 | 1189 | into method label _QA9 code_regex ([\s\S]*) replace_matched 1190 | begin 1191 | \\rmdt.p1("EC _QA9 enter")\n 1192 | %1\n 1193 | \\rmdt.p1("EC _QA9 exit")\n 1194 | end; 1195 | 1196 | into method label _QAA code_regex ([\s\S]*) replace_matched 1197 | begin 1198 | \\rmdt.p1("EC _QAA enter")\n 1199 | %1\n 1200 | \\rmdt.p1("EC _QAA exit")\n 1201 | end; 1202 | 1203 | into method label _QAB code_regex ([\s\S]*) replace_matched 1204 | begin 1205 | \\rmdt.p1("EC _QAB enter")\n 1206 | %1\n 1207 | \\rmdt.p1("EC _QAB exit")\n 1208 | end; 1209 | 1210 | into method label _QAC code_regex ([\s\S]*) replace_matched 1211 | begin 1212 | \\rmdt.p1("EC _QAC enter")\n 1213 | %1\n 1214 | \\rmdt.p1("EC _QAC exit")\n 1215 | end; 1216 | 1217 | into method label _QAD code_regex ([\s\S]*) replace_matched 1218 | begin 1219 | \\rmdt.p1("EC _QAD enter")\n 1220 | %1\n 1221 | \\rmdt.p1("EC _QAD exit")\n 1222 | end; 1223 | 1224 | into method label _QAE code_regex ([\s\S]*) replace_matched 1225 | begin 1226 | \\rmdt.p1("EC _QAE enter")\n 1227 | %1\n 1228 | \\rmdt.p1("EC _QAE exit")\n 1229 | end; 1230 | 1231 | into method label _QAF code_regex ([\s\S]*) replace_matched 1232 | begin 1233 | \\rmdt.p1("EC _QAF enter")\n 1234 | %1\n 1235 | \\rmdt.p1("EC _QAF exit")\n 1236 | end; 1237 | 1238 | into method label _QB0 code_regex ([\s\S]*) replace_matched 1239 | begin 1240 | \\rmdt.p1("EC _QB0 enter")\n 1241 | %1\n 1242 | \\rmdt.p1("EC _QB0 exit")\n 1243 | end; 1244 | 1245 | into method label _QB1 code_regex ([\s\S]*) replace_matched 1246 | begin 1247 | \\rmdt.p1("EC _QB1 enter")\n 1248 | %1\n 1249 | \\rmdt.p1("EC _QB1 exit")\n 1250 | end; 1251 | 1252 | into method label _QB2 code_regex ([\s\S]*) replace_matched 1253 | begin 1254 | \\rmdt.p1("EC _QB2 enter")\n 1255 | %1\n 1256 | \\rmdt.p1("EC _QB2 exit")\n 1257 | end; 1258 | 1259 | into method label _QB3 code_regex ([\s\S]*) replace_matched 1260 | begin 1261 | \\rmdt.p1("EC _QB3 enter")\n 1262 | %1\n 1263 | \\rmdt.p1("EC _QB3 exit")\n 1264 | end; 1265 | 1266 | into method label _QB4 code_regex ([\s\S]*) replace_matched 1267 | begin 1268 | \\rmdt.p1("EC _QB4 enter")\n 1269 | %1\n 1270 | \\rmdt.p1("EC _QB4 exit")\n 1271 | end; 1272 | 1273 | into method label _QB5 code_regex ([\s\S]*) replace_matched 1274 | begin 1275 | \\rmdt.p1("EC _QB5 enter")\n 1276 | %1\n 1277 | \\rmdt.p1("EC _QB5 exit")\n 1278 | end; 1279 | 1280 | into method label _QB6 code_regex ([\s\S]*) replace_matched 1281 | begin 1282 | \\rmdt.p1("EC _QB6 enter")\n 1283 | %1\n 1284 | \\rmdt.p1("EC _QB6 exit")\n 1285 | end; 1286 | 1287 | into method label _QB7 code_regex ([\s\S]*) replace_matched 1288 | begin 1289 | \\rmdt.p1("EC _QB7 enter")\n 1290 | %1\n 1291 | \\rmdt.p1("EC _QB7 exit")\n 1292 | end; 1293 | 1294 | into method label _QB8 code_regex ([\s\S]*) replace_matched 1295 | begin 1296 | \\rmdt.p1("EC _QB8 enter")\n 1297 | %1\n 1298 | \\rmdt.p1("EC _QB8 exit")\n 1299 | end; 1300 | 1301 | into method label _QB9 code_regex ([\s\S]*) replace_matched 1302 | begin 1303 | \\rmdt.p1("EC _QB9 enter")\n 1304 | %1\n 1305 | \\rmdt.p1("EC _QB9 exit")\n 1306 | end; 1307 | 1308 | into method label _QBA code_regex ([\s\S]*) replace_matched 1309 | begin 1310 | \\rmdt.p1("EC _QBA enter")\n 1311 | %1\n 1312 | \\rmdt.p1("EC _QBA exit")\n 1313 | end; 1314 | 1315 | into method label _QBB code_regex ([\s\S]*) replace_matched 1316 | begin 1317 | \\rmdt.p1("EC _QBB enter")\n 1318 | %1\n 1319 | \\rmdt.p1("EC _QBB exit")\n 1320 | end; 1321 | 1322 | into method label _QBC code_regex ([\s\S]*) replace_matched 1323 | begin 1324 | \\rmdt.p1("EC _QBC enter")\n 1325 | %1\n 1326 | \\rmdt.p1("EC _QBC exit")\n 1327 | end; 1328 | 1329 | into method label _QBD code_regex ([\s\S]*) replace_matched 1330 | begin 1331 | \\rmdt.p1("EC _QBD enter")\n 1332 | %1\n 1333 | \\rmdt.p1("EC _QBD exit")\n 1334 | end; 1335 | 1336 | into method label _QBE code_regex ([\s\S]*) replace_matched 1337 | begin 1338 | \\rmdt.p1("EC _QBE enter")\n 1339 | %1\n 1340 | \\rmdt.p1("EC _QBE exit")\n 1341 | end; 1342 | 1343 | into method label _QBF code_regex ([\s\S]*) replace_matched 1344 | begin 1345 | \\rmdt.p1("EC _QBF enter")\n 1346 | %1\n 1347 | \\rmdt.p1("EC _QBF exit")\n 1348 | end; 1349 | 1350 | into method label _QC0 code_regex ([\s\S]*) replace_matched 1351 | begin 1352 | \\rmdt.p1("EC _QC0 enter")\n 1353 | %1\n 1354 | \\rmdt.p1("EC _QC0 exit")\n 1355 | end; 1356 | 1357 | into method label _QC1 code_regex ([\s\S]*) replace_matched 1358 | begin 1359 | \\rmdt.p1("EC _QC1 enter")\n 1360 | %1\n 1361 | \\rmdt.p1("EC _QC1 exit")\n 1362 | end; 1363 | 1364 | into method label _QC2 code_regex ([\s\S]*) replace_matched 1365 | begin 1366 | \\rmdt.p1("EC _QC2 enter")\n 1367 | %1\n 1368 | \\rmdt.p1("EC _QC2 exit")\n 1369 | end; 1370 | 1371 | into method label _QC3 code_regex ([\s\S]*) replace_matched 1372 | begin 1373 | \\rmdt.p1("EC _QC3 enter")\n 1374 | %1\n 1375 | \\rmdt.p1("EC _QC3 exit")\n 1376 | end; 1377 | 1378 | into method label _QC4 code_regex ([\s\S]*) replace_matched 1379 | begin 1380 | \\rmdt.p1("EC _QC4 enter")\n 1381 | %1\n 1382 | \\rmdt.p1("EC _QC4 exit")\n 1383 | end; 1384 | 1385 | into method label _QC5 code_regex ([\s\S]*) replace_matched 1386 | begin 1387 | \\rmdt.p1("EC _QC5 enter")\n 1388 | %1\n 1389 | \\rmdt.p1("EC _QC5 exit")\n 1390 | end; 1391 | 1392 | into method label _QC6 code_regex ([\s\S]*) replace_matched 1393 | begin 1394 | \\rmdt.p1("EC _QC6 enter")\n 1395 | %1\n 1396 | \\rmdt.p1("EC _QC6 exit")\n 1397 | end; 1398 | 1399 | into method label _QC7 code_regex ([\s\S]*) replace_matched 1400 | begin 1401 | \\rmdt.p1("EC _QC7 enter")\n 1402 | %1\n 1403 | \\rmdt.p1("EC _QC7 exit")\n 1404 | end; 1405 | 1406 | into method label _QC8 code_regex ([\s\S]*) replace_matched 1407 | begin 1408 | \\rmdt.p1("EC _QC8 enter")\n 1409 | %1\n 1410 | \\rmdt.p1("EC _QC8 exit")\n 1411 | end; 1412 | 1413 | into method label _QC9 code_regex ([\s\S]*) replace_matched 1414 | begin 1415 | \\rmdt.p1("EC _QC9 enter")\n 1416 | %1\n 1417 | \\rmdt.p1("EC _QC9 exit")\n 1418 | end; 1419 | 1420 | into method label _QCA code_regex ([\s\S]*) replace_matched 1421 | begin 1422 | \\rmdt.p1("EC _QCA enter")\n 1423 | %1\n 1424 | \\rmdt.p1("EC _QCA exit")\n 1425 | end; 1426 | 1427 | into method label _QCB code_regex ([\s\S]*) replace_matched 1428 | begin 1429 | \\rmdt.p1("EC _QCB enter")\n 1430 | %1\n 1431 | \\rmdt.p1("EC _QCB exit")\n 1432 | end; 1433 | 1434 | into method label _QCC code_regex ([\s\S]*) replace_matched 1435 | begin 1436 | \\rmdt.p1("EC _QCC enter")\n 1437 | %1\n 1438 | \\rmdt.p1("EC _QCC exit")\n 1439 | end; 1440 | 1441 | into method label _QCD code_regex ([\s\S]*) replace_matched 1442 | begin 1443 | \\rmdt.p1("EC _QCD enter")\n 1444 | %1\n 1445 | \\rmdt.p1("EC _QCD exit")\n 1446 | end; 1447 | 1448 | into method label _QCE code_regex ([\s\S]*) replace_matched 1449 | begin 1450 | \\rmdt.p1("EC _QCE enter")\n 1451 | %1\n 1452 | \\rmdt.p1("EC _QCE exit")\n 1453 | end; 1454 | 1455 | into method label _QCF code_regex ([\s\S]*) replace_matched 1456 | begin 1457 | \\rmdt.p1("EC _QCF enter")\n 1458 | %1\n 1459 | \\rmdt.p1("EC _QCF exit")\n 1460 | end; 1461 | 1462 | into method label _QD0 code_regex ([\s\S]*) replace_matched 1463 | begin 1464 | \\rmdt.p1("EC _QD0 enter")\n 1465 | %1\n 1466 | \\rmdt.p1("EC _QD0 exit")\n 1467 | end; 1468 | 1469 | into method label _QD1 code_regex ([\s\S]*) replace_matched 1470 | begin 1471 | \\rmdt.p1("EC _QD1 enter")\n 1472 | %1\n 1473 | \\rmdt.p1("EC _QD1 exit")\n 1474 | end; 1475 | 1476 | into method label _QD2 code_regex ([\s\S]*) replace_matched 1477 | begin 1478 | \\rmdt.p1("EC _QD2 enter")\n 1479 | %1\n 1480 | \\rmdt.p1("EC _QD2 exit")\n 1481 | end; 1482 | 1483 | into method label _QD3 code_regex ([\s\S]*) replace_matched 1484 | begin 1485 | \\rmdt.p1("EC _QD3 enter")\n 1486 | %1\n 1487 | \\rmdt.p1("EC _QD3 exit")\n 1488 | end; 1489 | 1490 | into method label _QD4 code_regex ([\s\S]*) replace_matched 1491 | begin 1492 | \\rmdt.p1("EC _QD4 enter")\n 1493 | %1\n 1494 | \\rmdt.p1("EC _QD4 exit")\n 1495 | end; 1496 | 1497 | into method label _QD5 code_regex ([\s\S]*) replace_matched 1498 | begin 1499 | \\rmdt.p1("EC _QD5 enter")\n 1500 | %1\n 1501 | \\rmdt.p1("EC _QD5 exit")\n 1502 | end; 1503 | 1504 | into method label _QD6 code_regex ([\s\S]*) replace_matched 1505 | begin 1506 | \\rmdt.p1("EC _QD6 enter")\n 1507 | %1\n 1508 | \\rmdt.p1("EC _QD6 exit")\n 1509 | end; 1510 | 1511 | into method label _QD7 code_regex ([\s\S]*) replace_matched 1512 | begin 1513 | \\rmdt.p1("EC _QD7 enter")\n 1514 | %1\n 1515 | \\rmdt.p1("EC _QD7 exit")\n 1516 | end; 1517 | 1518 | into method label _QD8 code_regex ([\s\S]*) replace_matched 1519 | begin 1520 | \\rmdt.p1("EC _QD8 enter")\n 1521 | %1\n 1522 | \\rmdt.p1("EC _QD8 exit")\n 1523 | end; 1524 | 1525 | into method label _QD9 code_regex ([\s\S]*) replace_matched 1526 | begin 1527 | \\rmdt.p1("EC _QD9 enter")\n 1528 | %1\n 1529 | \\rmdt.p1("EC _QD9 exit")\n 1530 | end; 1531 | 1532 | into method label _QDA code_regex ([\s\S]*) replace_matched 1533 | begin 1534 | \\rmdt.p1("EC _QDA enter")\n 1535 | %1\n 1536 | \\rmdt.p1("EC _QDA exit")\n 1537 | end; 1538 | 1539 | into method label _QDB code_regex ([\s\S]*) replace_matched 1540 | begin 1541 | \\rmdt.p1("EC _QDB enter")\n 1542 | %1\n 1543 | \\rmdt.p1("EC _QDB exit")\n 1544 | end; 1545 | 1546 | into method label _QDC code_regex ([\s\S]*) replace_matched 1547 | begin 1548 | \\rmdt.p1("EC _QDC enter")\n 1549 | %1\n 1550 | \\rmdt.p1("EC _QDC exit")\n 1551 | end; 1552 | 1553 | into method label _QDD code_regex ([\s\S]*) replace_matched 1554 | begin 1555 | \\rmdt.p1("EC _QDD enter")\n 1556 | %1\n 1557 | \\rmdt.p1("EC _QDD exit")\n 1558 | end; 1559 | 1560 | into method label _QDE code_regex ([\s\S]*) replace_matched 1561 | begin 1562 | \\rmdt.p1("EC _QDE enter")\n 1563 | %1\n 1564 | \\rmdt.p1("EC _QDE exit")\n 1565 | end; 1566 | 1567 | into method label _QDF code_regex ([\s\S]*) replace_matched 1568 | begin 1569 | \\rmdt.p1("EC _QDF enter")\n 1570 | %1\n 1571 | \\rmdt.p1("EC _QDF exit")\n 1572 | end; 1573 | 1574 | into method label _QE0 code_regex ([\s\S]*) replace_matched 1575 | begin 1576 | \\rmdt.p1("EC _QE0 enter")\n 1577 | %1\n 1578 | \\rmdt.p1("EC _QE0 exit")\n 1579 | end; 1580 | 1581 | into method label _QE1 code_regex ([\s\S]*) replace_matched 1582 | begin 1583 | \\rmdt.p1("EC _QE1 enter")\n 1584 | %1\n 1585 | \\rmdt.p1("EC _QE1 exit")\n 1586 | end; 1587 | 1588 | into method label _QE2 code_regex ([\s\S]*) replace_matched 1589 | begin 1590 | \\rmdt.p1("EC _QE2 enter")\n 1591 | %1\n 1592 | \\rmdt.p1("EC _QE2 exit")\n 1593 | end; 1594 | 1595 | into method label _QE3 code_regex ([\s\S]*) replace_matched 1596 | begin 1597 | \\rmdt.p1("EC _QE3 enter")\n 1598 | %1\n 1599 | \\rmdt.p1("EC _QE3 exit")\n 1600 | end; 1601 | 1602 | into method label _QE4 code_regex ([\s\S]*) replace_matched 1603 | begin 1604 | \\rmdt.p1("EC _QE4 enter")\n 1605 | %1\n 1606 | \\rmdt.p1("EC _QE4 exit")\n 1607 | end; 1608 | 1609 | into method label _QE5 code_regex ([\s\S]*) replace_matched 1610 | begin 1611 | \\rmdt.p1("EC _QE5 enter")\n 1612 | %1\n 1613 | \\rmdt.p1("EC _QE5 exit")\n 1614 | end; 1615 | 1616 | into method label _QE6 code_regex ([\s\S]*) replace_matched 1617 | begin 1618 | \\rmdt.p1("EC _QE6 enter")\n 1619 | %1\n 1620 | \\rmdt.p1("EC _QE6 exit")\n 1621 | end; 1622 | 1623 | into method label _QE7 code_regex ([\s\S]*) replace_matched 1624 | begin 1625 | \\rmdt.p1("EC _QE7 enter")\n 1626 | %1\n 1627 | \\rmdt.p1("EC _QE7 exit")\n 1628 | end; 1629 | 1630 | into method label _QE8 code_regex ([\s\S]*) replace_matched 1631 | begin 1632 | \\rmdt.p1("EC _QE8 enter")\n 1633 | %1\n 1634 | \\rmdt.p1("EC _QE8 exit")\n 1635 | end; 1636 | 1637 | into method label _QE9 code_regex ([\s\S]*) replace_matched 1638 | begin 1639 | \\rmdt.p1("EC _QE9 enter")\n 1640 | %1\n 1641 | \\rmdt.p1("EC _QE9 exit")\n 1642 | end; 1643 | 1644 | into method label _QEA code_regex ([\s\S]*) replace_matched 1645 | begin 1646 | \\rmdt.p1("EC _QEA enter")\n 1647 | %1\n 1648 | \\rmdt.p1("EC _QEA exit")\n 1649 | end; 1650 | 1651 | into method label _QEB code_regex ([\s\S]*) replace_matched 1652 | begin 1653 | \\rmdt.p1("EC _QEB enter")\n 1654 | %1\n 1655 | \\rmdt.p1("EC _QEB exit")\n 1656 | end; 1657 | 1658 | into method label _QEC code_regex ([\s\S]*) replace_matched 1659 | begin 1660 | \\rmdt.p1("EC _QEC enter")\n 1661 | %1\n 1662 | \\rmdt.p1("EC _QEC exit")\n 1663 | end; 1664 | 1665 | into method label _QED code_regex ([\s\S]*) replace_matched 1666 | begin 1667 | \\rmdt.p1("EC _QED enter")\n 1668 | %1\n 1669 | \\rmdt.p1("EC _QED exit")\n 1670 | end; 1671 | 1672 | into method label _QEE code_regex ([\s\S]*) replace_matched 1673 | begin 1674 | \\rmdt.p1("EC _QEE enter")\n 1675 | %1\n 1676 | \\rmdt.p1("EC _QEE exit")\n 1677 | end; 1678 | 1679 | into method label _QEF code_regex ([\s\S]*) replace_matched 1680 | begin 1681 | \\rmdt.p1("EC _QEF enter")\n 1682 | %1\n 1683 | \\rmdt.p1("EC _QEF exit")\n 1684 | end; 1685 | 1686 | into method label _QF0 code_regex ([\s\S]*) replace_matched 1687 | begin 1688 | \\rmdt.p1("EC _QF0 enter")\n 1689 | %1\n 1690 | \\rmdt.p1("EC _QF0 exit")\n 1691 | end; 1692 | 1693 | into method label _QF1 code_regex ([\s\S]*) replace_matched 1694 | begin 1695 | \\rmdt.p1("EC _QF1 enter")\n 1696 | %1\n 1697 | \\rmdt.p1("EC _QF1 exit")\n 1698 | end; 1699 | 1700 | into method label _QF2 code_regex ([\s\S]*) replace_matched 1701 | begin 1702 | \\rmdt.p1("EC _QF2 enter")\n 1703 | %1\n 1704 | \\rmdt.p1("EC _QF2 exit")\n 1705 | end; 1706 | 1707 | into method label _QF3 code_regex ([\s\S]*) replace_matched 1708 | begin 1709 | \\rmdt.p1("EC _QF3 enter")\n 1710 | %1\n 1711 | \\rmdt.p1("EC _QF3 exit")\n 1712 | end; 1713 | 1714 | into method label _QF4 code_regex ([\s\S]*) replace_matched 1715 | begin 1716 | \\rmdt.p1("EC _QF4 enter")\n 1717 | %1\n 1718 | \\rmdt.p1("EC _QF4 exit")\n 1719 | end; 1720 | 1721 | into method label _QF5 code_regex ([\s\S]*) replace_matched 1722 | begin 1723 | \\rmdt.p1("EC _QF5 enter")\n 1724 | %1\n 1725 | \\rmdt.p1("EC _QF5 exit")\n 1726 | end; 1727 | 1728 | into method label _QF6 code_regex ([\s\S]*) replace_matched 1729 | begin 1730 | \\rmdt.p1("EC _QF6 enter")\n 1731 | %1\n 1732 | \\rmdt.p1("EC _QF6 exit")\n 1733 | end; 1734 | 1735 | into method label _QF7 code_regex ([\s\S]*) replace_matched 1736 | begin 1737 | \\rmdt.p1("EC _QF7 enter")\n 1738 | %1\n 1739 | \\rmdt.p1("EC _QF7 exit")\n 1740 | end; 1741 | 1742 | into method label _QF8 code_regex ([\s\S]*) replace_matched 1743 | begin 1744 | \\rmdt.p1("EC _QF8 enter")\n 1745 | %1\n 1746 | \\rmdt.p1("EC _QF8 exit")\n 1747 | end; 1748 | 1749 | into method label _QF9 code_regex ([\s\S]*) replace_matched 1750 | begin 1751 | \\rmdt.p1("EC _QF9 enter")\n 1752 | %1\n 1753 | \\rmdt.p1("EC _QF9 exit")\n 1754 | end; 1755 | 1756 | into method label _QFA code_regex ([\s\S]*) replace_matched 1757 | begin 1758 | \\rmdt.p1("EC _QFA enter")\n 1759 | %1\n 1760 | \\rmdt.p1("EC _QFA exit")\n 1761 | end; 1762 | 1763 | into method label _QFB code_regex ([\s\S]*) replace_matched 1764 | begin 1765 | \\rmdt.p1("EC _QFB enter")\n 1766 | %1\n 1767 | \\rmdt.p1("EC _QFB exit")\n 1768 | end; 1769 | 1770 | into method label _QFC code_regex ([\s\S]*) replace_matched 1771 | begin 1772 | \\rmdt.p1("EC _QFC enter")\n 1773 | %1\n 1774 | \\rmdt.p1("EC _QFC exit")\n 1775 | end; 1776 | 1777 | into method label _QFD code_regex ([\s\S]*) replace_matched 1778 | begin 1779 | \\rmdt.p1("EC _QFD enter")\n 1780 | %1\n 1781 | \\rmdt.p1("EC _QFD exit")\n 1782 | end; 1783 | 1784 | into method label _QFE code_regex ([\s\S]*) replace_matched 1785 | begin 1786 | \\rmdt.p1("EC _QFE enter")\n 1787 | %1\n 1788 | \\rmdt.p1("EC _QFE exit")\n 1789 | end; 1790 | 1791 | into method label _QFF code_regex ([\s\S]*) replace_matched 1792 | begin 1793 | \\rmdt.p1("EC _QFF enter")\n 1794 | %1\n 1795 | \\rmdt.p1("EC _QFF exit")\n 1796 | end; 1797 | 1798 | -------------------------------------------------------------------------------- /instrument_WAK_PTS.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #instrument_WAK_PTS.txt 3 | 4 | # Apply this patch to get debug output at beginning and end of _PTS/_WAK 5 | 6 | # instrument _PTS and _WAK 7 | into method label _WAK code_regex ([\s\S]*)(Return[\s\S]*) replace_matched 8 | begin 9 | \\rmdt.p2("_WAK enter", Arg0)\n 10 | %1\n 11 | \\rmdt.p1("_WAK exit")\n 12 | %2\n 13 | end; 14 | 15 | into method label _PTS code_regex ([\s\S]*) replace_matched 16 | begin 17 | \\rmdt.p2("_PTS enter", Arg0)\n 18 | %1\n 19 | \\rmdt.p1("_PTS exit")\n 20 | end; 21 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | KEXT=ACPIDebug.kext 2 | DIST=RehabMan-Debug 3 | BUILDDIR=./Build/Products 4 | 5 | VERSION_ERA=$(shell ./print_version.sh) 6 | ifeq "$(VERSION_ERA)" "10.10-" 7 | INSTDIR=/System/Library/Extensions 8 | else 9 | INSTDIR=/Library/Extensions 10 | endif 11 | 12 | ifeq ($(findstring 32,$(BITS)),32) 13 | OPTIONS:=$(OPTIONS) -arch i386 14 | endif 15 | 16 | ifeq ($(findstring 64,$(BITS)),64) 17 | OPTIONS:=$(OPTIONS) -arch x86_64 18 | endif 19 | 20 | .PHONY: all 21 | all: 22 | xcodebuild build $(OPTIONS) -configuration Debug 23 | xcodebuild build $(OPTIONS) -configuration Release 24 | 25 | .PHONY: clean 26 | clean: 27 | xcodebuild clean $(OPTIONS) -configuration Debug 28 | xcodebuild clean $(OPTIONS) -configuration Release 29 | 30 | .PHONY: update_kernelcache 31 | update_kernelcache: 32 | sudo touch /System/Library/Extensions 33 | sudo kextcache -update-volume / 34 | 35 | .PHONY: install_debug 36 | install_debug: 37 | sudo rm -Rf $(INSTDIR)/$(KEXT) 38 | sudo cp -R $(BUILDDIR)/Debug/$(KEXT) $(INSTDIR) 39 | if [ "`which tag`" != "" ]; then sudo tag -a Purple $(INSTDIR)/$(KEXT); fi 40 | make update_kernelcache 41 | 42 | .PHONY: install 43 | install: 44 | sudo rm -Rf $(INSTDIR)/$(KEXT) 45 | sudo cp -R $(BUILDDIR)/Release/$(KEXT) $(INSTDIR) 46 | if [ "`which tag`" != "" ]; then sudo tag -a Blue $(INSTDIR)/$(KEXT); fi 47 | make update_kernelcache 48 | 49 | .PHONY: distribute 50 | distribute: 51 | if [ -e ./Distribute ]; then rm -r ./Distribute; fi 52 | mkdir ./Distribute 53 | #cp -R $(BUILDDIR)/Debug ./Distribute 54 | cp -R $(BUILDDIR)/Release ./Distribute 55 | find ./Distribute -path *.DS_Store -delete 56 | find ./Distribute -path *.dSYM -exec echo rm -r {} \; >/tmp/org.voodoo.rm.dsym.sh 57 | chmod +x /tmp/org.voodoo.rm.dsym.sh 58 | /tmp/org.voodoo.rm.dsym.sh 59 | rm /tmp/org.voodoo.rm.dsym.sh 60 | ditto -c -k --sequesterRsrc --zlibCompressionLevel 9 ./Distribute ./Archive.zip 61 | mv ./Archive.zip ./Distribute/`date +$(DIST)-%Y-%m%d.zip` 62 | -------------------------------------------------------------------------------- /print_version.sh: -------------------------------------------------------------------------------- 1 | #set -x 2 | 3 | # extract minor version (eg. 10.9 vs. 10.10 vs. 10.11) 4 | MINOR_VER=$([[ "$(sw_vers -productVersion)" =~ [0-9]+\.([0-9]+) ]] && echo ${BASH_REMATCH[1]}) 5 | if [[ $MINOR_VER -ge 11 ]]; then 6 | echo 10.11+ 7 | else 8 | echo 10.10- 9 | fi 10 | -------------------------------------------------------------------------------- /remove.txt: -------------------------------------------------------------------------------- 1 | #Maintained by: RehabMan for: ACPIDebug 2 | #remove.txt 3 | 4 | # remove debugging code 5 | 6 | into device label RMDT remove_entry; 7 | into_all all code_regex .*\\RMDT\..* removeall_matched; 8 | into_all all code_regex .*\\rmdt\..* removeall_matched; 9 | into_all all code_regex External\s*\(RMDT.*Obj\) removeall_matched; 10 | --------------------------------------------------------------------------------