/*** debugger.c - Debugger functions * * This module contains all the debug functions. * * Copyright (c) 1996,1997 Microsoft Corporation * Author: Michael Tsang (MikeTs) * Created 09/18/96 * * MODIFICATION HISTORY */ #include "pch.h" #ifdef DEBUGGER /*** Miscellaneous Constants */ #define MAX_CMDLINE_LEN 255 /*** Local function prototypes */ LONG LOCAL DbgExecuteCmd(PDBGCMD pDbgCmds, PSZ pszCmd); BOOLEAN LOCAL IsCommandInAMLIExtension(PSZ pszCmd); /*** Local data */ PSZ pszTokenSeps = " \t\n"; /***LP Debugger - generic debugger entry point * * ENTRY * pDbgCmds -> debugger command table * pszPrompt -> prompt string * * EXIT * None */ VOID LOCAL Debugger(PDBGCMD pDbgCmds, PSZ pszPrompt) { char szCmdLine[MAX_CMDLINE_LEN + 1]; char Buffer[MAX_CMDLINE_LEN + 1]; PSZ psz; for (;;) { ConPrompt(pszPrompt, szCmdLine, sizeof(szCmdLine)); STRCPY(Buffer, szCmdLine); if((psz = STRTOK(szCmdLine, pszTokenSeps)) != NULL) { if(IsCommandInAMLIExtension(psz)) { char Command[MAX_CMDLINE_LEN + (10 * sizeof(char))] = {0}; char Name[] = "ACPI"; STRCPY(Command, "!AMLI "); STRCAT(Command, Buffer); STRCAT(Command, " ; g"); DbgCommandString(Name, Command); } else if (DbgExecuteCmd(pDbgCmds, psz) == DBGERR_QUIT) break; } } } //Debugger /***LP DbgExecuteCmd - execute a debugger command * * ENTRY * pDbgCmds -> debugger command table * pszCmd -> command string * * EXIT-SUCCESS * returns DBGERR_NONE or DBGERR_QUIT * EXIT-FAILURE * returns negative error code */ LONG LOCAL DbgExecuteCmd(PDBGCMD pDbgCmds, PSZ pszCmd) { LONG rc = DBGERR_NONE; int i; ULONG dwNumArgs = 0, dwNonSWArgs = 0; for (i = 0; pDbgCmds[i].pszCmd != NULL; i++) { if (STRCMP(pszCmd, pDbgCmds[i].pszCmd) == 0) { if (pDbgCmds[i].dwfCmd & CMDF_QUIT) { rc = DBGERR_QUIT; } else if ((pDbgCmds[i].pArgTable == NULL) || ((rc = DbgParseArgs(pDbgCmds[i].pArgTable, &dwNumArgs, &dwNonSWArgs, pszTokenSeps)) == ARGERR_NONE)) { if (pDbgCmds[i].pfnCmd != NULL) rc = pDbgCmds[i].pfnCmd(NULL, NULL, dwNumArgs, dwNonSWArgs); } else rc = DBGERR_PARSE_ARGS; break; } } if (pDbgCmds[i].pszCmd == NULL) { DBG_ERROR(("invalid command - %s", pszCmd)); rc = DBGERR_INVALID_CMD; } return rc; } //DbgExecuteCmd BOOLEAN LOCAL IsCommandInAMLIExtension(PSZ pszCmd) { BOOLEAN bRet = FALSE; ULONG i = 0; static PSZ CommandsInAMLIExtension[] = { "bc", "bd", "be", "bl", "bp", "cl", "dh", "dl", "dns", "do", "ds", "find", "lc", "ln", "r", "set", "u" }; ULONG NumCommands = (sizeof(CommandsInAMLIExtension)/sizeof(PSZ)); for(i = 0; i < NumCommands; i++) { if(STRCMPI(CommandsInAMLIExtension[i], pszCmd) == 0) { bRet = TRUE; break; } } return bRet; } #endif //ifdef DEBUGGER