delete the old apps folder
[reactos.git] / reactos / apps / utils / pice / module / parse.c
diff --git a/reactos/apps/utils/pice/module/parse.c b/reactos/apps/utils/pice/module/parse.c
deleted file mode 100644 (file)
index 66e449c..0000000
+++ /dev/null
@@ -1,4102 +0,0 @@
-/*++
-
-Copyright (c) 1998-2001 Klaus P. Gerlicher
-
-Module Name:
-
-    parse.c
-
-Abstract:
-
-    execution of debugger commands
-
-Environment:
-
-    Kernel mode only
-
-Author:
-
-    Klaus P. Gerlicher
-
-Revision History:
-
-    19-Aug-1998:       created
-    15-Nov-2000:    general cleanup of source files
-
-Copyright notice:
-
-  This file may be distributed under the terms of the GNU Public License.
-
---*/
-
-////////////////////////////////////////////////////
-// INCLUDES
-////
-#include "remods.h"
-#include "precomp.h"
-#include "pci_ids.h"
-
-///////////////////////////////////////////////////
-// GLOBALS
-
-ULONG ValueTrue=1,ValueFalse=0;
-ULONG ulLastDisassStartAddress=0,ulLastDisassEndAddress=0,ulLastInvertedAddress=0;
-USHORT gCurrentSelector=0;
-ULONG gCurrentOffset=0;
-LONG ulCurrentlyDisplayedLineNumber=0;
-USHORT usOldDisasmSegment = 0;
-ULONG ulOldDisasmOffset = 0;
-static ULONG ulCountForWaitKey = 0;
-
-extern PDEBUG_MODULE pdebug_module_head;
-extern PDEBUG_MODULE pdebug_module_tail;
-
-//extern unsigned long sys_call_table[];
-
-BOOLEAN (*DisplayMemory)(PARGS) = DisplayMemoryDword;
-
-char szCurrentFile[256]="";
-PDEBUG_MODULE pCurrentMod=NULL;
-PICE_SYMBOLFILE_HEADER* pCurrentSymbols=NULL;
-
-// suppresses passing on of function keys while stepping code
-BOOLEAN bStepping = FALSE;
-BOOLEAN bInt3Here = TRUE;
-BOOLEAN bInt1Here = TRUE;
-
-KEYWORDS RegKeyWords[]={
-       {"eax",&CurrentEAX,sizeof(ULONG)},
-       {"ebx",&CurrentEBX,sizeof(ULONG)},
-       {"ecx",&CurrentECX,sizeof(ULONG)},
-       {"edx",&CurrentEDX,sizeof(ULONG)},
-       {"edi",&CurrentEDI,sizeof(ULONG)},
-       {"esi",&CurrentESI,sizeof(ULONG)},
-       {"ebp",&CurrentEBP,sizeof(ULONG)},
-       {"esp",&CurrentESP,sizeof(ULONG)},
-       {"eip",&CurrentEIP,sizeof(ULONG)},
-       {NULL,0,0}
-};
-
-KEYWORDS SelectorRegKeyWords[]={
-       {"cs",&CurrentCS,sizeof(USHORT)},
-       {"ds",&CurrentDS,sizeof(USHORT)},
-       {"es",&CurrentES,sizeof(USHORT)},
-       {"fs",&CurrentFS,sizeof(USHORT)},
-       {"gs",&CurrentGS,sizeof(USHORT)},
-       {"ss",&CurrentSS,sizeof(USHORT)},
-       {NULL,0,0}
-};
-
-KEYWORDS OnOffKeyWords[]={
-       {"on",&ValueTrue,sizeof(ULONG)},
-       {"off",&ValueFalse,sizeof(ULONG)},
-       {NULL,0,0}
-};
-
-KEYWORDS SpecialKeyWords[]={
-       {"process",&CurrentProcess,sizeof(ULONG)},
-       {NULL,0,0}
-};
-
-LPSTR LocalVarRegs[]=
-{
-    "EAX",
-    "ECX",
-    "EDX",
-    "EBX",
-    "ESP",
-    "EBP",
-    "ESI",
-    "EDI",
-    "EIP",
-    "EFL",
-    "CS",
-    "SS",
-    "DS",
-    "ES",
-    "FS",
-    "GS"
-};
-
-
-#define COMMAND_HAS_NO_PARAMS       (0)
-#define COMMAND_HAS_PARAMS          (1<<0)
-#define COMMAND_HAS_SWITCHES        (1<<1)
-//
-#define PARAM_CAN_BE_SYMBOLIC           (1<<0)
-#define PARAM_CAN_BE_SEG_OFFSET         (1<<1)
-#define PARAM_CAN_BE_MODULE             (1<<2)
-#define PARAM_CAN_BE_PRNAME             (1<<3)
-#define PARAM_CAN_BE_PID                (1<<4)
-#define PARAM_CAN_BE_SRC_FILE           (1<<5)
-#define PARAM_CAN_BE_NUMERIC            (1<<6)
-#define PARAM_CAN_BE_REG_KEYWORD        (1<<7)
-#define PARAM_CAN_BE_ONOFF_KEYWORD      (1<<8)
-#define PARAM_CAN_BE_SPECIAL_KEYWORD    (1<<9)
-#define PARAM_CAN_BE_ASTERISK           (1<<10)
-#define PARAM_CAN_BE_ONOFF                     (1<<11)
-#define PARAM_CAN_BE_VIRTUAL_SYMBOLIC   (1<<12)
-#define PARAM_CAN_BE_SRCLINE            (1<<13)
-#define PARAM_CAN_BE_PARTIAL_SYM_NAME   (1<<14)
-#define PARAM_CAN_BE_ANY_STRING                    (1<<15)
-#define PARAM_CAN_BE_DECIMAL            (1<<16)
-#define PARAM_CAN_BE_SIZE_DESC          (1<<17)
-#define PARAM_CAN_BE_LETTER             (1<<18)
-//
-#define COMMAND_GROUP_HELP              (0)
-#define COMMAND_GROUP_FLOW              (1)
-#define COMMAND_GROUP_STRUCT            (2)
-#define COMMAND_GROUP_OS                (3)
-#define COMMAND_GROUP_MEM               (4)
-#define COMMAND_GROUP_BREAKPOINT        (5)
-#define COMMAND_GROUP_WINDOW            (6)
-#define COMMAND_GROUP_DEBUG             (7)
-#define COMMAND_GROUP_INFO              (8)
-#define COMMAND_GROUP_STATE             (9)
-#define COMMAND_GROUP_HELP_ONLY         (10)
-#define COMMAND_GROUP_LAST              (11)
-
-LPSTR CommandGroups[]=
-{
-    "HELP",
-    "FLOW CONTROL",
-    "STRUCTURES",
-    "OS SPECIFIC",
-    "MEMORY",
-    "BREAKPOINTS",
-    "WINDOW",
-    "DEBUGGING",
-    "INFORMATION",
-    "STATE",
-    "EDITOR",
-    NULL
-};
-// table of command handlers
-CMDTABLE CmdTable[]={
-       {"gdt",ShowGdt,"display current global descriptor table"                ,0,{0,0,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"idt",ShowIdt,"display current interrupt descriptor table"             ,0,{0,0,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"x",LeaveIce,"return to Reactos"                                                               ,0,{0,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"t",SingleStep,"single step one instruction"                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"vma",ShowVirtualMemory,"displays VMAs"                                                ,0,{0,0,0,0,0},"",COMMAND_GROUP_OS},
-       {"h",ShowHelp,"list help on commands"                                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_HELP},
-       {"page",ShowPageDirs,"dump page directories"                                    ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_REG_KEYWORD,0,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"proc",ShowProcesses,"list all processes"                                              ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_PRNAME|PARAM_CAN_BE_PID,0,0,0,0},"",COMMAND_GROUP_OS},
-       {"dd",DisplayMemoryDword,"display dword memory"                         ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_SYMBOLIC|PARAM_CAN_BE_REG_KEYWORD,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"db",DisplayMemoryByte,"display byte memory "                      ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_SYMBOLIC|PARAM_CAN_BE_REG_KEYWORD,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"dpd",DisplayPhysMemDword,"display dword physical memory"      ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"u",Unassemble,"disassemble at address"                                                ,COMMAND_HAS_PARAMS|COMMAND_HAS_SWITCHES,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_SYMBOLIC|PARAM_CAN_BE_REG_KEYWORD|PARAM_CAN_BE_SRCLINE,0,0,0,0},"f",COMMAND_GROUP_MEM},
-       {"mod",ShowModules,"displays all modules"                                           ,0,{0,0,0,0,0},"",COMMAND_GROUP_OS},
-       {"bpx",SetBreakpoint,"set code breakpoint"                                              ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_VIRTUAL_SYMBOLIC|PARAM_CAN_BE_SYMBOLIC|PARAM_CAN_BE_SRCLINE|PARAM_CAN_BE_REG_KEYWORD,0,0,0,0},"",COMMAND_GROUP_BREAKPOINT},
-       {"bl",ListBreakpoints,"list breakpoints"                                                ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC,0,0,0,0},"",COMMAND_GROUP_BREAKPOINT},
-       {"bc",ClearBreakpoints,"clear breakpoints"                                              ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC|PARAM_CAN_BE_ASTERISK,0,0,0,0},"",COMMAND_GROUP_BREAKPOINT},
-       {"ver",Ver,"display pICE version and state information"                 ,0,{0,0,0,0,0},"",COMMAND_GROUP_INFO},
-       {"hboot",Hboot,"hard boot the system"                                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"code",SetCodeDisplay,"toggle code display"                                    ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_ONOFF,0,0,0,0},"",COMMAND_GROUP_STATE},
-       {"cpu",ShowCPU,"display CPU special registers"                                  ,0,{0,0,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"stack",WalkStack,"display call stack"                                                 ,0,{0,0,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"peek",PeekMemory,"peek at physical memory"                                    ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_SIZE_DESC,PARAM_CAN_BE_NUMERIC,0,0,0},"",COMMAND_GROUP_MEM},
-       {"poke",PokeMemory,"poke to physical memory"                            ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_SIZE_DESC,PARAM_CAN_BE_NUMERIC,PARAM_CAN_BE_NUMERIC,0,0},"",COMMAND_GROUP_MEM},
-       {".",UnassembleAtCurrentEip,"unassemble at current instruction" ,0,{0,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"p",StepOver,"single step over call"                                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"i",StepInto,"single step into call"                                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"locals",ShowLocals,"display local symbols"                                    ,0,{0,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"table",SwitchTables,"display loaded symbol tables"                    ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_MODULE,0,0,0,0},"",COMMAND_GROUP_DEBUG},
-       {"file",SwitchFiles,"display source files in symbol table"              ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_SRC_FILE,0,0,0,0},"",COMMAND_GROUP_DEBUG},
-       {"sym",ShowSymbols,"list known symbol information"                              ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_PARTIAL_SYM_NAME,0,0,0,0},"",COMMAND_GROUP_DEBUG},
-       {"?",EvaluateExpression,"evaluate an expression"                                ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_ANY_STRING,0,0,0,0},"",COMMAND_GROUP_DEBUG},
-       {"src",SetSrcDisplay,"sets disassembly mode"                                    ,0,{0,0,0,0,0},"",COMMAND_GROUP_DEBUG},
-       {"wc",SizeCodeWindow,"change size of code window"                               ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_DECIMAL,0,0,0,0},"",COMMAND_GROUP_WINDOW},
-       {"wd",SizeDataWindow,"change size of data window"                               ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_DECIMAL,0,0,0,0},"",COMMAND_GROUP_WINDOW},
-       {"r",SetGetRegisters,"sets or displays registers"                               ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_REG_KEYWORD,PARAM_CAN_BE_NUMERIC,0,0,0},"",COMMAND_GROUP_STRUCT},
-       {"cls",ClearScreen,"clear output window"                                        ,0,{0,0,0,0,0},"",COMMAND_GROUP_WINDOW},
-       {"phys",ShowMappings,"show all mappings for linear address"             ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_NUMERIC,0,0,0,0},"",COMMAND_GROUP_MEM},
-       {"timers",ShowTimers,"show all active timers"                                   ,0,{0,0,0,0,0},"",COMMAND_GROUP_OS},
-       {"pci",ShowPCI,"show PCI devices"                                               ,COMMAND_HAS_PARAMS|COMMAND_HAS_SWITCHES,{PARAM_CAN_BE_DECIMAL,PARAM_CAN_BE_DECIMAL,0,0,0},"a",COMMAND_GROUP_INFO},
-       {"next",NextInstr,"advance EIP to next instruction"                             ,0,{0,0,0,0,0},""},
-       {"i3here",I3here,"catch INT 3s"                                                                 ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_ONOFF,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"layout",SetKeyboardLayout,"sets keyboard layout"                      ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_ANY_STRING,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"syscall",ShowSysCallTable,"displays syscall (table)"                  ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_DECIMAL,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"altkey",SetAltKey,"set alternate break key"                           ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_LETTER,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"addr",ShowContext,"show/set address contexts"                         ,COMMAND_HAS_PARAMS,{PARAM_CAN_BE_PRNAME,0,0,0,0},"",COMMAND_GROUP_FLOW},
-       {"arrow up",NULL,""                                                 ,0,{0,0,0,0,0},"",COMMAND_GROUP_HELP_ONLY},
-    {NULL,0,NULL}
-};
-
-char tempCmd[1024];
-
-char HexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7',
-                    '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-
-CPUINFO CPUInfo[]={
-       {"DR0",&CurrentDR0},
-       {"DR1",&CurrentDR1},
-       {"DR2",&CurrentDR2},
-       {"DR3",&CurrentDR3},
-       {"DR6",&CurrentDR6},
-       {"DR7",&CurrentDR7},
-       {"EFLAGS",&CurrentEFL},
-       {"CR0",&CurrentCR0},
-       {"CR2",&CurrentCR2},
-       {"CR3",&CurrentCR3},
-       {"",NULL},
-};
-
-BP Bp[4]={
-       {0,0,0,FALSE,FALSE,FALSE,"",""},
-       {0,0,0,FALSE,FALSE,FALSE,"",""},
-       {0,0,0,FALSE,FALSE,FALSE,"",""},
-       {0,0,0,FALSE,FALSE,FALSE,"",""}
-};
-
-BOOLEAN bShowSrc = TRUE;
-BOOLEAN bCodeOn = FALSE;
-BOOLEAN bNeedToFillBuffer = TRUE;
-
-char *NonSystemSegmentTypes[]=
-{
-       "Data RO",
-       "Data RO accessed",
-       "Data RW",
-       "Data RW accessed",
-       "Data RO expand-dwon",
-       "Data RO expand-down, accessed",
-       "Data RW expand-dwon",
-       "Data RW expand-down, accessed",
-       "Code EO",
-       "Code EO accessed",
-       "Code ER",
-       "Code ER accessed",
-       "Code EO conforming",
-       "Code EO conforming, accessed",
-       "Code ER conforming",
-       "Code ER conforming, accessed"
-};
-
-char *SystemSegmentTypes[]=
-{
-       "reserved0",
-       "16-bit TSS (available)",
-       "LDT",
-       "16-bit TSS (busy)",
-       "16-bit call gate",
-       "task gate",
-       "16-bit interrupt gate",
-       "16-bit trap gate",
-       "reserved1",
-       "32-bit TSS (available)",
-       "reserved2",
-       "32-bit TSS (busy)",
-       "32-bit call gate",
-       "reserved3",
-       "32-bit interrupt gate",
-       "32-bit trap gate"
-};
-
-////////////////////////////////////////////////////
-// FUNCTIONS
-////
-
-//*************************************************************************
-// RepaintSource()
-//
-//*************************************************************************
-void RepaintSource(void)
-{
-    ARGS Args;
-
-    ENTER_FUNC();
-
-    // disassembly from current address
-    PICE_memset(&Args,0,sizeof(ARGS));
-    // make unassembler refresh all again
-    ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-       Args.Count=0;
-       Unassemble(&Args);
-
-    LEAVE_FUNC();
-}
-
-//*************************************************************************
-// RepaintDesktop()
-//
-//*************************************************************************
-void RepaintDesktop(void)
-{
-    ARGS Args;
-
-    ENTER_FUNC();
-
-    PrintTemplate();
-
-    DisplayRegs();
-
-    // display data window
-       Args.Value[0]=OldSelector;
-       Args.Value[1]=OldOffset;
-       Args.Count=2;
-       DisplayMemory(&Args);
-
-    // disassembly from current address
-    PICE_memset(&Args,0,sizeof(ARGS));
-    // make unassembler refresh all again
-    ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-       Args.Count=0;
-       Unassemble(&Args);
-
-    PrintRingBuffer(wWindow[OUTPUT_WINDOW].cy-1);
-    Print(OUTPUT_WINDOW,"");
-
-    ShowStoppedMsg();
-    ShowStatusLine();
-
-    LEAVE_FUNC();
-}
-
-//*************************************************************************
-// PutStatusText()
-//
-//*************************************************************************
-void PutStatusText(LPSTR p)
-{
-    ENTER_FUNC();
-
-       ClrLine(wWindow[OUTPUT_WINDOW].y-1);
-       PutChar(p,1,wWindow[OUTPUT_WINDOW].y-1);
-
-    LEAVE_FUNC();
-}
-
-//*************************************************************************
-// WaitForKey()
-//
-//*************************************************************************
-BOOLEAN WaitForKey(void)
-{
-    BOOLEAN result=TRUE;
-
-    if(ulCountForWaitKey == 0)
-        SuspendPrintRingBuffer(TRUE);
-
-    ulCountForWaitKey++;
-
-       if(ulCountForWaitKey == (wWindow[OUTPUT_WINDOW].cy-1))
-       {
-        SuspendPrintRingBuffer(FALSE);
-
-       PrintRingBuffer(wWindow[OUTPUT_WINDOW].cy-1);
-
-        ulCountForWaitKey = 0;
-
-               SetBackgroundColor(WHITE);
-               ClrLine(wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].cy);
-               PutChar(" Press any key to continue listing or press ESC to stop... ",1,wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].cy);
-               ucKeyPressedWhileIdle=0;
-        while(!(ucKeyPressedWhileIdle=GetKeyPolled()))
-               {
-                       PrintCursor(FALSE);
-               }
-               SetBackgroundColor(BLACK);
-               // if ESCAPE then indicate retreat
-               if(ucKeyPressedWhileIdle==SCANCODE_ESC)
-               {
-                       result=FALSE;
-               }
-               ucKeyPressedWhileIdle=0;
-       }
-
-
-    return result;
-}
-
-/////////////////////////////////////////////////////////////
-// command handlers
-/////////////////////////////////////////////////////////////
-
-//*************************************************************************
-// SingleStep()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SingleStep)
-{
-    ULONG ulLineNumber;
-    LPSTR pSrcStart,pSrcEnd,pFilename;
-
-    ENTER_FUNC();
-
-    if(FindSourceLineForAddress(GetLinearAddress(CurrentCS,CurrentEIP),&ulLineNumber,&pSrcStart,&pSrcEnd,&pFilename))
-    {
-        DPRINT((0,"SingleStep(): stepping into source\n"));
-        StepInto(NULL);
-    }
-    else
-    {
-           // modify trace flag
-           CurrentEFL|=0x100; // set trace flag (TF)
-
-           bSingleStep=TRUE;
-           bNotifyToExit=TRUE;
-    }
-
-    bStepping = TRUE;
-
-    LEAVE_FUNC();
-
-    return TRUE;
-}
-
-
-//*************************************************************************
-// StepOver()
-//
-// step over calls
-//*************************************************************************
-COMMAND_PROTOTYPE(StepOver)
-{
-       char tempDisasm[256];
-       ULONG dwBreakAddress;
-    ULONG ulLineNumber;
-    LPSTR pSrcStart,pSrcEnd,pFilename;
-
-    ENTER_FUNC();
-
-       DPRINT((0,"StepOver():\n"));
-
-    // only no arguments supplied
-    // when we have source and current disassembly mod is SOURCE
-    // we have to analyse the code block for the source line
-    if(FindSourceLineForAddress(GetLinearAddress(CurrentCS,CurrentEIP),&ulLineNumber,&pSrcStart,&pSrcEnd,&pFilename))
-    {
-        DPRINT((0,"StepOver(): we have source here!\n"));
-        DPRINT((0,"StepOver(): line #%u in file = %s!\n",ulLineNumber,pFilename));
-
-        g_ulLineNumberStart = ulLineNumber;
-        bStepThroughSource = TRUE;
-
-        // deinstall the INT3 in kernel's printk()
-        DeInstallPrintkHook();
-
-        goto proceed_as_normal;
-    }
-    else
-    {
-        DPRINT((0,"StepOver(): no source here!\n"));
-
-proceed_as_normal:
-               // if there is some form of call instruction at EIP we need to find
-               // the return address
-               if(IsCallInstrAtEIP())
-               {
-                       // get address of next instruction
-                       dwBreakAddress=GetLinearAddress(CurrentCS,CurrentEIP);
-
-                       Disasm(&dwBreakAddress,tempDisasm);
-
-                       DPRINT((0,"address of break = %.4X:%.8X\n",CurrentCS,dwBreakAddress));
-
-                       dwBreakAddress=GetLinearAddress(CurrentCS,dwBreakAddress);
-
-                       DPRINT((0,"linear address of break = %.8X\n",dwBreakAddress));
-
-                       DPRINT((0,"setting DR0=%.8X\n",dwBreakAddress));
-
-            SetHardwareBreakPoint(dwBreakAddress,0);
-
-                       bSingleStep = FALSE;
-                       bNotifyToExit = TRUE;
-               }
-               else
-               {
-                       DPRINT((0,"no call at breakpoint\n"));
-                       // modify trace flag
-               CurrentEFL|=0x100; // set trace flag (TF)
-
-               bSingleStep=TRUE;
-               bNotifyToExit=TRUE;
-               }
-    }
-
-    bStepInto = FALSE;
-
-    bStepping = TRUE;
-
-    LEAVE_FUNC();
-
-    return TRUE;
-}
-
-//*************************************************************************
-// StepInto()
-//
-// step into calls
-//*************************************************************************
-COMMAND_PROTOTYPE(StepInto)
-{
-    ULONG ulLineNumber;
-    LPSTR pSrcStart,pSrcEnd,pFilename;
-
-    ENTER_FUNC();
-
-    // only no arguments supplied
-    // when we have source and current disassembly mod is SOURCE
-    // we have to analyse the code block for the source line
-    if(FindSourceLineForAddress(GetLinearAddress(CurrentCS,CurrentEIP),&ulLineNumber,&pSrcStart,&pSrcEnd,&pFilename))
-    {
-        DPRINT((0,"StepOver(): we have source here!\n"));
-        DPRINT((0,"StepOver(): line #%u in file = %s!\n",ulLineNumber,pFilename));
-
-        g_ulLineNumberStart = ulLineNumber;
-        bStepThroughSource = TRUE;
-
-        // deinstall the INT3 in kernel's printk()
-        DeInstallPrintkHook();
-
-        goto proceed_as_normal_into;
-    }
-    else
-    {
-        DPRINT((0,"StepInto(): no source here!\n"));
-
-proceed_as_normal_into:
-
-           // modify trace flag
-           CurrentEFL|=0x100; // set trace flag (TF)
-
-           bSingleStep=TRUE;
-           bNotifyToExit=TRUE;
-    }
-
-    bStepInto = TRUE;
-
-    bStepping = TRUE;
-
-    LEAVE_FUNC();
-
-    return TRUE;
-}
-
-//*************************************************************************
-// SetBreakpoint()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SetBreakpoint)
-{
-    ULONG addr,addrorg;
-    USHORT segment;
-
-       if(pArgs->Count<=2)
-       {
-        if(pArgs->bNotTranslated[0]==FALSE)
-        {
-                   if(gCurrentSelector)
-                   {
-                           addr=pArgs->Value[0];
-                           addrorg=gCurrentOffset;
-                           segment=gCurrentSelector;
-                   }
-                   else
-                   {
-                           addrorg=addr=pArgs->Value[0];
-                           segment=CurrentCS;
-                   }
-
-            if(InstallSWBreakpoint(GetLinearAddress(segment,addr),FALSE,NULL) )
-            {
-                       PICE_sprintf(tempCmd,"BP #%u set to %.4X:%.8X\n",0,segment,addr);
-            }
-            else
-            {
-                       PICE_sprintf(tempCmd,"BP #%u NOT set (either page not valid OR already used)\n",0);
-            }
-               Print(OUTPUT_WINDOW,tempCmd);
-        }
-        else
-        {
-            if(InstallVirtualSWBreakpoint((LPSTR)pArgs->Value[0],(LPSTR)pArgs->Value[1]) )
-            {
-                       PICE_sprintf(tempCmd,"BP #%u virtually set to %s!%s\n",0,(LPSTR)pArgs->Value[0],(LPSTR)pArgs->Value[1]);
-            }
-            else
-            {
-                       PICE_sprintf(tempCmd,"BP #%u NOT set (maybe no symbols loaded)\n",0);
-            }
-               Print(OUTPUT_WINDOW,tempCmd);
-        }
-
-               RepaintSource();
-
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// ListBreakpoints()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ListBreakpoints)
-{
-       ULONG i;
-
-    ListSWBreakpoints();
-
-       for(i=0;i<4;i++)
-       {
-               if(Bp[i].Used)
-               {
-                       PICE_sprintf(tempCmd,"(%u) %s %.4X:%.8X(linear %.8X)\n",i,Bp[i].Active?"*":" ",Bp[i].Segment,Bp[i].Offset,Bp[i].LinearAddress);
-                       Print(OUTPUT_WINDOW,tempCmd);
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// ClearBreakpoints()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ClearBreakpoints)
-{
-       if(pArgs->Count)
-       {
-               if(pArgs->Value[0]<4)
-               {
-                       Bp[pArgs->Value[0]].Used=Bp[pArgs->Value[0]].Active=FALSE;
-               }
-               RepaintSource();
-       }
-       else
-       {
-       ULONG i;
-
-        RemoveAllSWBreakpoints(FALSE);
-
-               for(i=0;i<4;i++)Bp[i].Used=Bp[i].Active=FALSE;
-               RepaintSource();
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// LeaveIce()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(LeaveIce)
-{
-       //      SetHardwareBreakPoints();
-
-       bSingleStep=FALSE;
-       bNotifyToExit=TRUE;
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowGdt()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowGdt)
-{
-       ULONG gdtr[2];
-       USHORT i;
-       PGDT pGdt;
-       static ULONG addr=0;
-       LPSTR pVerbose;
-
-       // get GDT register
-       __asm__ ("sgdt %0\n"
-               :"=m" (gdtr));
-
-    // info out
-       PICE_sprintf(tempCmd,"Address=%.8X Limit=%.4X\n",(gdtr[1]<<16)|(gdtr[0]>>16),gdtr[0]&0xFFFF);
-       Print(OUTPUT_WINDOW,tempCmd);
-    WaitForKey();
-
-       // make pointer to GDT
-       pGdt=(PGDT)(((ULONG)(gdtr[1]<<16))|((ULONG)(gdtr[0]>>16)));
-       if(pArgs->Count==1)
-       {
-       ULONG limit=((pGdt[addr].Limit_19_16<<16)|pGdt[addr].Limit_15_0);
-
-               addr=pArgs->Value[0];
-               addr&=(~0x7);
-               if(pGdt[addr>>3].Gran)limit=(limit*4096)|0xfff;
-
-               if(!pGdt[addr>>3].DescType)
-                       pVerbose = SystemSegmentTypes[pGdt[addr>>3].SegType];
-               else
-                       pVerbose = NonSystemSegmentTypes[pGdt[addr>>3].SegType];
-
-               PICE_sprintf(tempCmd,"%.4X %.8X %.8X %s %u %s\n",
-                                               addr,
-                                               (pGdt[addr>>3].Base_31_24<<24)|(pGdt[addr>>3].Base_23_16<<16)|(pGdt[addr>>3].Base_15_0),
-                                               limit,
-                                               pGdt[addr>>3].Present?" P":"NP",
-                                               pGdt[addr>>3].Dpl,
-                                               pVerbose);
-               Print(OUTPUT_WINDOW,tempCmd);
-       }
-       else if(pArgs->Count==0)
-       {
-               for(i=0;i<((gdtr[0]&0xFFFF)>>3);i++)
-               {
-                       ULONG limit=((pGdt[i].Limit_19_16<<16)|pGdt[i].Limit_15_0);
-
-                       if(!pGdt[i].DescType)
-                               pVerbose = SystemSegmentTypes[pGdt[i].SegType];
-                       else
-                               pVerbose = NonSystemSegmentTypes[pGdt[i].SegType];
-
-                       if(pGdt[i].Gran)limit=(limit*4096)|0xfff;
-
-                       PICE_sprintf(tempCmd,"%.4X %.8X %.8X %s %u %s\n",
-                                                       i<<3,
-                                                       (pGdt[i].Base_31_24<<24)|(pGdt[i].Base_23_16<<16)|(pGdt[i].Base_15_0),
-                                                       limit,
-                                                       pGdt[i].Present?" P":"NP",
-                                                       pGdt[i].Dpl,
-                                                       pVerbose);
-                       Print(OUTPUT_WINDOW,tempCmd);
-                       if(WaitForKey()==FALSE)break;
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// OutputIdtEntry()
-//
-//*************************************************************************
-void OutputIdtEntry(PIDT pIdt,ULONG i)
-{
-    USHORT seg;
-    ULONG offset;
-    LPSTR pSym;
-
-    seg = (USHORT)pIdt[i].Selector;
-    offset = (pIdt[i].Offset_31_16<<16)|(pIdt[i].Offset_15_0);
-
-    switch(pIdt[i].DescType)
-       {
-               // task gate
-               case 0x5:
-                       PICE_sprintf(tempCmd,"(%0.4X) %0.4X:%0.8X %u [task]\n",i,
-                                                                                                                       seg,
-                                                                                                                       GetLinearAddress((USHORT)seg,0),
-                                                                                                                       pIdt[i].Dpl);
-                       break;
-               // interrupt gate
-               case 0x6:
-               case 0xE:
-                       if(ScanExportsByAddress(&pSym,GetLinearAddress((USHORT)seg,offset)))
-                       {
-                               PICE_sprintf(tempCmd,"(%0.4X) %0.4X:%0.8X %u [int] (%s)\n",i,
-                                                                                                                                       seg,
-                                                                                                                                       offset,
-                                                                                                                                       pIdt[i].Dpl,
-                                                                                                                                       pSym);
-                       }
-                       else
-                       {
-                               PICE_sprintf(tempCmd,"(%0.4X) %0.4X:%0.8X %u [int]\n",i,
-                                                                                                                                       seg,
-                                                                                                                                       offset,
-                                                                                                                                       pIdt[i].Dpl);
-                       }
-                       break;
-               // trap gate
-               case 0x7:
-               case 0xF:
-                       if(ScanExportsByAddress(&pSym,GetLinearAddress((USHORT)seg,offset)))
-                       {
-                               PICE_sprintf(tempCmd,"(%0.4X) %0.4X:%0.8X %u [trap] (%s)\n",i,
-                                                                                                                                       seg,
-                                                                                                                                       offset,
-                                                                                                                                       pIdt[i].Dpl,
-                                                                                                                                       pSym);
-                       }
-                       else
-                       {
-                               PICE_sprintf(tempCmd,"(%0.4X) %0.4X:%0.8X %u [trap]\n",i,
-                                                                                                                                       seg,
-                                                                                                                                       offset,
-                                                                                                                                       pIdt[i].Dpl);
-                       }
-                       break;
-               default:
-                       PICE_sprintf(tempCmd,"(%0.4X) INVALID\n",i);
-                       break;
-       }
-       Print(OUTPUT_WINDOW,tempCmd);
-}
-
-//*************************************************************************
-// ShowIdt()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowIdt)
-{
-       ULONG idtr[2];
-       USHORT i;
-       PIDT pIdt;
-       ULONG addr=0;
-
-       ENTER_FUNC();
-
-       // get GDT register
-       __asm__ ("sidt %0\n"
-               :"=m" (idtr));
-       // info out
-       PICE_sprintf(tempCmd,"Address=%.8X Limit=%.4X\n",(idtr[1]<<16)|(idtr[0]>>16),idtr[0]&0xFFFF);
-       Print(OUTPUT_WINDOW,tempCmd);
-    WaitForKey();
-       // make pointer to GDT
-       pIdt=(PIDT)(((ULONG)(idtr[1]<<16))|((ULONG)(idtr[0]>>16)));
-       if(pArgs->Count==1)
-       {
-               addr=pArgs->Value[0];
-               addr&=(~0x7);
-
-       }
-       else if(pArgs->Count==0)
-       {
-               for(i=0;i<((idtr[0]&0xFFFF)>>3);i++)
-               {
-            OutputIdtEntry(pIdt,i);
-                       if(WaitForKey()==FALSE)break;
-               }
-       }
-       LEAVE_FUNC();
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowHelp()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowHelp)
-{
-       ULONG i,j;
-
-    PutStatusText("COMMAND KEYWORD        DESCRIPTION");
-    for(j=0;j<COMMAND_GROUP_LAST;j++)
-    {
-               PICE_sprintf(tempCmd,"= %-20s =====================================\n",CommandGroups[j]);
-               Print(OUTPUT_WINDOW,tempCmd);
-        WaitForKey();
-
-           for(i=0;CmdTable[i].Cmd!=NULL;i++)
-           {
-            if(CmdTable[i].CommandGroup == j)
-            {
-                       PICE_sprintf(tempCmd,"%-20s   %s\n",CmdTable[i].Cmd,CmdTable[i].Help);
-                       Print(OUTPUT_WINDOW,tempCmd);
-                       if(WaitForKey()==FALSE)return TRUE;
-            }
-           }
-    }
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowPageDirs()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowPageDirs)
-{
-       ULONG i;
-       PPAGEDIR pPageDir;
-       PULONG pPGD;
-       PULONG pPTE;
-       PEPROCESS my_current = IoGetCurrentProcess();
-
-    ENTER_FUNC();
-
-    DPRINT((0,"ShowPageDirs(): my_current = %.8X\n",(ULONG)my_current));
-
-    // don't touch if not valid process
-       if(my_current)
-       {
-        // no arguments supplied -> show all page directories
-               if(!pArgs->Count)
-               {
-            PutStatusText("Linear            Physical Attributes");
-            // there are 1024 page directories each mapping 1024*4k of address space
-                       for(i=0;i<1024;i++)
-                       {
-                ULONG ulAddress = i<<22;
-                // from the mm_struct get pointer to page directory for this address
-                pPGD = ADDR_TO_PDE(ulAddress);
-                // create a structurized pointer from PGD
-                pPageDir = (PPAGEDIR)pPGD;
-
-                if(pPageDir->PTBase)
-                {
-
-                                   PICE_sprintf(tempCmd,"%.8X-%.8X %.8X %s %s %s\n",
-                                                           ulAddress, ulAddress + 0x400000,
-                                                           (pPageDir->PTBase<<12),
-                                                           pPageDir->P?"P ":"NP",
-                                                           pPageDir->RW?"RW":"R ",
-                                                           pPageDir->US?"U":"S");
-                                   Print(OUTPUT_WINDOW,tempCmd);
-
-                               if(WaitForKey()==FALSE)break;
-                }
-                       }
-               }
-
-         // one arg supplied -> show individual page
-               else if(pArgs->Count == 1)
-               {
-            pPGD = ADDR_TO_PDE((ULONG)pArgs->Value[0]);
-
-            DPRINT((0,"ShowPageDirs(): VA = %.8X\n",pArgs->Value[0]));
-            DPRINT((0,"ShowPageDirs(): pPGD = %.8X\n",(ULONG)pPGD));
-
-            if(pPGD && ((*pPGD)&_PAGE_PRESENT))
-            {
-                // 4M page
-                if((*pPGD)&_PAGE_4M)
-                {
-                    PPAGEDIR pPage = (PPAGEDIR)pPGD;
-
-                    PutStatusText("Linear    Physical   Attributes");
-
-                    PICE_sprintf(tempCmd,"%.8X  %.8X     %s %s %s (LARGE PAGE PTE @ %.8X)\n",
-                                                       pArgs->Value[0],
-                                                       (pPage->PTBase<<12)|(pArgs->Value[0]&0x7FFFFF),
-                                                       pPage->P?"P ":"NP",
-                                                       pPage->RW?"RW":"R ",
-                                                       pPage->US?"U":"S",
-                                (ULONG)pPGD);
-                }
-                else
-                {
-                    pPTE = ADDR_TO_PTE(pArgs->Value[0]);
-                    DPRINT((0,"ShowPageDirs(): pPTE = %.8X\n",(ULONG)pPTE));
-                    if(pPTE)
-                    {
-                        PPAGEDIR pPage = (PPAGEDIR)pPTE;
-                        DPRINT((0,"ShowPageDirs(): pPage->PTBase = %.8X\n",(ULONG)pPage->PTBase));
-
-                        PutStatusText("Linear    Physical   Attributes");
-
-                        PICE_sprintf(tempCmd,"%.8X  %.8X     %s %s %s (PTE @ %.8X)\n",
-                                                           pArgs->Value[0],
-                                                           (pPage->PTBase<<12)|(pArgs->Value[0]&(_PAGE_SIZE-1)),
-                                                           (pPage->P==1)?"P ":"NP",
-                                                           pPage->RW?"RW":"R ",
-                                                           pPage->US?"U":"S",
-                                    (ULONG)pPTE);
-                    }
-
-                }
-                       Print(OUTPUT_WINDOW,tempCmd);
-            }
-            else
-            {
-                PICE_sprintf(tempCmd,"page at %.8X not present.\n",pArgs->Value[0]);
-                       Print(OUTPUT_WINDOW,tempCmd);
-            }
-
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowProcesses()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowProcesses)
-{
-       PEPROCESS my_current = IoGetCurrentProcess();
-    PLIST_ENTRY current_entry;
-       PEPROCESS currentps;
-
-       ENTER_FUNC();
-
-       current_entry = pPsProcessListHead->Flink;
-
-       if( current_entry ){
-
-           PutStatusText("NAME             TASK         PID");
-
-               while( current_entry != pPsProcessListHead ){
-                               currentps = CONTAINING_RECORD(current_entry,
-                                         EPROCESS,
-                                         ProcessListEntry);
-                           DPRINT((0,"currentps = %x\n",currentps));
-                               //ei would be nice to mark current process!
-                               PICE_sprintf(tempCmd,"%-16.16s %-12x %x\n",currentps->ImageFileName,
-                                               (ULONG)currentps,currentps->UniqueProcessId);
-                               Print(OUTPUT_WINDOW,tempCmd);
-                               if(WaitForKey()==FALSE)
-                                       break;
-                               current_entry = current_entry->Flink;
-               }
-       }
-    LEAVE_FUNC();
-       return TRUE;
-}
-
-//*************************************************************************
-// DisplayMemoryDword()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(DisplayMemoryDword)
-{
-    ULONG i,j,k;
-    static ULONG addr=0,addrorg;
-    static USHORT segment;
-    char temp[8];
-    LPSTR pSymbolName;
-
-       ENTER_FUNC();
-       DPRINT((0,"DisplayMemoryDword()\n"));
-       if(pArgs->Count==2)
-       {
-               segment=(USHORT)pArgs->Value[0];
-               if(!segment)segment=GLOBAL_DATA_SEGMENT;
-               addr=pArgs->Value[1];
-        OldSelector = segment;
-        OldOffset = addr;
-               addrorg=addr;
-               addr=GetLinearAddress(segment,addr);
-       }
-       else if(pArgs->Count==1)
-       {
-               segment=CurrentDS;
-               addr=pArgs->Value[0];
-        OldOffset = addr;
-               addrorg=addr;
-               addr=GetLinearAddress(segment,addr);
-       }
-       else if(pArgs->Count==0)
-    {
-        addr += sizeof(ULONG)*4*4;
-        OldOffset = addr;
-    }
-
-    if(ScanExportsByAddress(&pSymbolName,addr))
-    {
-               PICE_sprintf(tempCmd," %s ",pSymbolName);
-               SetForegroundColor(COLOR_TEXT);
-               SetBackgroundColor(COLOR_CAPTION);
-               PutChar(tempCmd,GLOBAL_SCREEN_WIDTH-1-PICE_strlen(tempCmd),wWindow[DATA_WINDOW].y-1);
-        ResetColor();
-    }
-
-       DisableScroll(DATA_WINDOW);
-
-    if(DisplayMemory != DisplayMemoryDword)
-    {
-        Clear(DATA_WINDOW);
-        DisplayMemory = DisplayMemoryDword;
-    }
-    else
-           Home(DATA_WINDOW);
-
-       for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines
-       {
-               PICE_sprintf(tempCmd,"%.4X:%.8X: ",segment,addrorg+k*16);
-               Print(1,tempCmd);
-               for(i=0;i<4;i++) // 4 dwords
-               {
-                       tempCmd[0]=0;
-                       Print(1," ");
-                       for(j=0;j<4;j++) // 1 dword = 4 bytes
-                       {
-                               if(IsAddressValid(addr+i*4+j+k*16))
-                               {
-                                       PICE_sprintf(temp,"%.2x",*(PUCHAR)(addr+i*4+j+k*16));
-                                       PICE_strrev(temp);
-                                       PICE_strcat(tempCmd,temp);
-                               }
-                               else
-                               {
-                                       PICE_strcat(tempCmd,"??");
-                               }
-                       }
-                       PICE_strrev(tempCmd);
-                       Print(1,tempCmd);
-               }
-               Print(1,"                     ");
-               tempCmd[0]=0;
-               for(j=0;j<16;j++) // 1 dword = 4 bytes
-               {
-            wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17;
-                       if(IsAddressValid(addr+j+k*16))
-                       {
-                               PICE_sprintf(temp,"%c",PICE_isprint(*(PUCHAR)(addr+j+k*16))?(*(PUCHAR)(addr+j+k*16)):'.');
-                               PICE_strcat(tempCmd,temp);
-                       }
-                       else
-                       {
-                               PICE_strcat(tempCmd,"?");
-                       }
-               }
-               Print(1,tempCmd);
-               Print(1,"\n");
-       }
-       EnableScroll(DATA_WINDOW);
-       addr+=16*4;
-       return TRUE;
-}
-
-//*************************************************************************
-// DisplayMemoryByte()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(DisplayMemoryByte)
-{
-    ULONG j,k;
-    static ULONG addr=0,addrorg;
-    static USHORT segment;
-    char temp[8];
-    LPSTR pSymbolName;
-
-       if(pArgs->Count==2)
-       {
-               segment=(USHORT)pArgs->Value[0];
-               if(!segment)segment=GLOBAL_DATA_SEGMENT;
-               addr=pArgs->Value[1];
-        OldSelector = segment;
-        OldOffset = addr;
-               addrorg=addr;
-               addr=GetLinearAddress(segment,addr);
-       }
-       else if(pArgs->Count==1)
-       {
-               segment=CurrentDS;
-               addr=pArgs->Value[0];
-        OldOffset = addr;
-               addrorg=addr;
-               addr=GetLinearAddress(segment,addr);
-       }
-       else if(pArgs->Count==0)
-    {
-        addr += sizeof(ULONG)*4*4;
-        OldOffset = addr;
-    }
-
-    if(DisplayMemory != DisplayMemoryByte)
-    {
-        Clear(DATA_WINDOW);
-        DisplayMemory = DisplayMemoryByte;
-    }
-    else
-           Home(DATA_WINDOW);
-
-    if(ScanExportsByAddress(&pSymbolName,addr))
-    {
-               PICE_sprintf(tempCmd," %s ",pSymbolName);
-               SetForegroundColor(COLOR_TEXT);
-               SetBackgroundColor(COLOR_CAPTION);
-               PutChar(tempCmd,GLOBAL_SCREEN_WIDTH-1-PICE_strlen(tempCmd),wWindow[DATA_WINDOW].y-1);
-        ResetColor();
-    }
-
-    DisableScroll(DATA_WINDOW);
-       for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines
-       {
-               PICE_sprintf(tempCmd,"%.4X:%.8X: ",segment,addrorg+k*16);
-               Print(1,tempCmd);
-               tempCmd[0]=0;
-               Print(1," ");
-               for(j=0;j<16;j++) // 1 dword = 4 bytes
-               {
-                       if(IsAddressValid(addr+j+k*16))
-                       {
-                               PICE_sprintf(temp,"%.2x ",*(PUCHAR)(addr+j+k*16));
-                               PICE_strcat(tempCmd,temp);
-                       }
-                       else
-                       {
-                               PICE_strcat(tempCmd,"?? ");
-                       }
-               }
-               Print(1,tempCmd);
-               Print(1,"  ");
-               tempCmd[0]=0;
-               for(j=0;j<16;j++) // 1 dword = 4 bytes
-               {
-            wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17;
-                       if(IsAddressValid(addr+j+k*16))
-                       {
-                               PICE_sprintf(temp,"%c",PICE_isprint(*(PUCHAR)(addr+j+k*16))?(*(PUCHAR)(addr+j+k*16)):'.');
-                               PICE_strcat(tempCmd,temp);
-                       }
-                       else
-                       {
-                               PICE_strcat(tempCmd,"?");
-                       }
-               }
-               Print(1,tempCmd);
-               Print(1,"\n");
-       }
-       EnableScroll(DATA_WINDOW);
-       addr+=16*4;
-       return TRUE;
-}
-
-//*************************************************************************
-// DisplayPhysMemDword()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(DisplayPhysMemDword)
-{
-    ULONG i,j,k;
-    static ULONG addr=0,addrorg;
-    static USHORT segment;
-    char temp[8];
-
-       ENTER_FUNC();
-       DPRINT((0,"DisplayPhysMemDword()\n"));
-
-       if(pArgs->Count==1)
-       {
-               segment=CurrentDS;
-               addr=pArgs->Value[0];
-        OldOffset = addr;
-               addrorg=addr;
-               addr=GetLinearAddress(segment,addr);
-       }
-       else if(pArgs->Count==0)
-    {
-        addr += sizeof(ULONG)*4*4;
-        OldOffset = addr;
-    }
-
-       DisableScroll(DATA_WINDOW);
-
-    if(DisplayMemory != DisplayPhysMemDword)
-    {
-        Clear(DATA_WINDOW);
-        DisplayMemory = DisplayPhysMemDword;
-    }
-    else
-           Home(DATA_WINDOW);
-
-       for(k=0;k<wWindow[DATA_WINDOW].cy;k++) // 4 lines
-       {
-               PICE_sprintf(tempCmd,"PHYS:%.8X: ",addrorg+k*16);
-               Print(1,tempCmd);
-               for(i=0;i<4;i++) // 4 dwords
-               {
-                       tempCmd[0]=0;
-            PICE_sprintf(tempCmd," %.8X",ReadPhysMem(addr+i*4+k*16,sizeof(ULONG)));
-                       Print(1,tempCmd);
-               }
-               Print(1,"                     ");
-               tempCmd[0]=0;
-               for(j=0;j<16;j++) // 1 dword = 4 bytes
-               {
-            UCHAR ucData;
-            wWindow[DATA_WINDOW].usCurX = GLOBAL_SCREEN_WIDTH-17;
-            ucData = ReadPhysMem(addr+j+k*16,sizeof(UCHAR));
-                       PICE_sprintf(temp,"%c",PICE_isprint(ucData)?ucData:'.');
-                       PICE_strcat(tempCmd,temp);
-               }
-               Print(1,tempCmd);
-               Print(1,"\n");
-       }
-       EnableScroll(DATA_WINDOW);
-       addr+=16*4;
-       return TRUE;
-}
-
-
-//*************************************************************************
-// DisplaySourceFile()
-//
-//*************************************************************************
-void DisplaySourceFile(LPSTR pSrcLine,LPSTR pSrcEnd,ULONG ulLineNumber,ULONG ulLineNumberToInvert)
-{
-    ULONG i;
-    LPSTR pTemp;
-    ULONG j = ulLineNumber-1;
-
-    DPRINT((0,"DisplaySourceFile(%.8X,%u,%u)\n",pSrcLine,ulLineNumber,ulLineNumberToInvert));
-
-    // go to line
-    while(j--)
-    {
-        // goto end of current line
-        while(*pSrcLine!=0x0a && *pSrcLine!=0x0d)
-            pSrcLine++;
-
-        // skip over the line end
-        if(*pSrcLine == 0x0d)
-            pSrcLine++;
-        if(*pSrcLine == 0x0a)
-            pSrcLine++;
-    }
-
-    Clear(SOURCE_WINDOW);
-    DisableScroll(SOURCE_WINDOW);
-    for(i=0;i<wWindow[SOURCE_WINDOW].cy;i++)
-    {
-        pTemp = tempCmd;
-
-        if(pSrcLine<pSrcEnd)
-        {
-            PICE_sprintf(tempCmd,".%.5u ",ulLineNumber+i);
-            pTemp = tempCmd + PICE_strlen(tempCmd);
-
-            while(pSrcLine<pSrcEnd && *pSrcLine!=0x0a && *pSrcLine!=0x0d)
-            {
-                if(*pSrcLine==0x9) // TAB
-                {
-                    *pTemp++ = 0x20;
-                    *pTemp++ = 0x20;
-                    *pTemp++ = 0x20;
-                    *pTemp++ = 0x20;
-                    pSrcLine++;
-                }
-                else
-                {
-                    *pTemp++ = *pSrcLine++;
-                }
-            }
-
-            if(pSrcLine<pSrcEnd)
-            {
-                // skip over the line end
-                if(*pSrcLine == 0x0d)
-                    pSrcLine++;
-                if(*pSrcLine == 0x0a)
-                    pSrcLine++;
-            }
-
-            *pTemp++ = '\n';
-            *pTemp = 0;
-
-            if(PICE_strlen(tempCmd)>GLOBAL_SCREEN_WIDTH-1)
-            {
-                tempCmd[GLOBAL_SCREEN_WIDTH-2]='\n';
-                tempCmd[GLOBAL_SCREEN_WIDTH-1]=0;
-            }
-
-            if( (ulLineNumberToInvert!=-1) &&
-               ((int)(ulLineNumberToInvert-ulLineNumber)>=0) &&
-               ((ulLineNumberToInvert-ulLineNumber)<wWindow[SOURCE_WINDOW].cy) &&
-               (i==(ulLineNumberToInvert-ulLineNumber)) )
-            {
-                SetForegroundColor(COLOR_BACKGROUND);
-                SetBackgroundColor(COLOR_FOREGROUND);
-            }
-
-            Print(SOURCE_WINDOW,tempCmd);
-
-            if( (ulLineNumberToInvert!=-1) &&
-               ((int)(ulLineNumberToInvert-ulLineNumber)>=0) &&
-               ((ulLineNumberToInvert-ulLineNumber)<wWindow[SOURCE_WINDOW].cy) &&
-               (i==(ulLineNumberToInvert-ulLineNumber)) )
-            {
-                ResetColor();
-            }
-
-        }
-        else
-        {
-            Print(SOURCE_WINDOW,"---- End of source file --------------\n");
-            break;
-        }
-    }
-    EnableScroll(SOURCE_WINDOW);
-}
-
-//*************************************************************************
-// UnassembleOneLineDown()
-//
-//*************************************************************************
-void UnassembleOneLineDown(void)
-{
-    ULONG addr,addrorg;
-
-    DPRINT((0,"UnassembleOneLineDown()\n"));
-
-    addrorg = addr = GetLinearAddress(usOldDisasmSegment,ulOldDisasmOffset);
-
-    DPRINT((0,"UnassembleOneLineDown(): addr = %.8X\n",addr));
-
-    tempCmd[0]=0;
-       Disasm(&addr,tempCmd);
-
-    DPRINT((0,"UnassembleOneLineDown(): addr after = %.8X\n",addr));
-
-    ulOldDisasmOffset += (addr - addrorg);
-    RepaintSource();
-}
-
-//*************************************************************************
-// UnassembleOnePageDown()
-//
-//*************************************************************************
-void UnassembleOnePageDown(ULONG page)
-{
-    ULONG addr,addrorg,i;
-
-    DPRINT((0,"UnassembleOnePageDown()\n"));
-
-    addrorg = addr = GetLinearAddress(usOldDisasmSegment,ulOldDisasmOffset);
-
-    DPRINT((0,"UnassembleOnePageDown(): addr = %.8X\n",addr));
-
-    tempCmd[0]=0;
-    for(i=0;i<page;i++)
-           Disasm(&addr,tempCmd);
-
-    DPRINT((0,"UnassembleOnePageDown(): addr after = %.8X\n",addr));
-
-    ulOldDisasmOffset += (addr - addrorg);
-    RepaintSource();
-}
-
-//*************************************************************************
-// UnassembleOneLineUp()
-//
-//*************************************************************************
-void UnassembleOneLineUp(void)
-{
-    ULONG addr,addrorg,addrbefore,start,end,addrstart;
-    LONG offset;
-    LPSTR pSymbol;
-
-    DPRINT((0,"UnassembleOneLineUp()\n"));
-
-    addrorg = addr = GetLinearAddress(usOldDisasmSegment,ulOldDisasmOffset);
-
-    DPRINT((0,"UnassembleOneLineUp(): addrorg = %.8X\n",addr));
-
-    offset = 1;
-
-    if((pSymbol = FindFunctionByAddress(addrorg-offset,&start,&end)) )
-    {
-        offset = addrorg - start;
-        DPRINT((0,"UnassembleOneLineUp(): %s @ offset = %u\n",pSymbol,offset));
-    }
-    else
-    {
-        // max instruction length is 15 bytes
-        offset = 15;
-    }
-
-    addrstart = addrorg;
-
-    // start at current address less offset
-    addr = addrorg - offset;
-    do
-    {
-        DPRINT((0,"UnassembleOneLineUp(): offset = %u addrorg %x addr %x\n",offset,addrorg,addr));
-        // disassemble while not reaching current instruction
-        addrbefore = addr;
-        tempCmd[0]=0;
-           Disasm(&addr,tempCmd);
-        DPRINT((0,"%.8X: %s\n",addrbefore,tempCmd));
-    }while((addr != addrorg) && (addrbefore < addrorg));
-
-    if((addrorg - addrstart)<=0)
-        ulOldDisasmOffset--;
-    else
-        ulOldDisasmOffset -= (addrorg - addrbefore);
-
-    DPRINT((0,"UnassembleOneLineUp(): new addr = %.4X:%.8X\n",usOldDisasmSegment,ulOldDisasmOffset));
-
-    RepaintSource();
-}
-
-//*************************************************************************
-// UnassembleOneLineUp()
-//
-//*************************************************************************
-void UnassembleOnePageUp(ULONG page)
-{
-    ULONG addr,addrorg,addrbefore,start,end,i,addrstart;
-    LONG offset;
-    LPSTR pSymbol;
-
-    DPRINT((0,"UnassembleOnePageUp()\n"));
-
-    for(i=0;i<page;i++)
-    {
-        addrorg = addr = GetLinearAddress(usOldDisasmSegment,ulOldDisasmOffset);
-
-        DPRINT((0,"UnassembleOnePageUp(): addrorg = %.8X\n",addr));
-
-        offset = 1;
-
-        if((pSymbol = FindFunctionByAddress(addrorg-offset,&start,&end)) )
-        {
-            offset = addrorg - start;
-            DPRINT((0,"UnassembleOnePageUp(): %s @ offset = %u\n",pSymbol,offset));
-        }
-        else
-        {
-            // max instruction length is 15 bytes
-            offset = 15;
-        }
-
-        // start at current address less offset
-        addr = addrorg - offset;
-        addrstart = addrorg;
-        do
-        {
-            DPRINT((0,"UnassembleOnePageUp(): offset = %u addrorg %x addr %x\n",offset,addrorg,addr));
-            addrbefore = addr;
-            // disassemble while not reaching current instruction
-            tempCmd[0]=0;
-               Disasm(&addr,tempCmd);
-            DPRINT((0,"%.8X: %s\n",addrbefore,tempCmd));
-        }while((addr != addrorg) && (addrbefore < addrorg));
-
-        if((addrorg - addrstart)<=0)
-            ulOldDisasmOffset--;
-        else
-            ulOldDisasmOffset -= (addrorg - addrbefore);
-
-    }
-
-    DPRINT((0,"UnassembleOnePageUp(): new addr = %.4X:%.8X\n",usOldDisasmSegment,ulOldDisasmOffset));
-
-    RepaintSource();
-}
-
-//*************************************************************************
-// Unassemble()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(Unassemble)
-{
-    ULONG i;
-    ULONG addr=0,addrorg,addrstart,ulLineNumber;
-    USHORT segment=0;
-    ULONG addrbefore;
-    LPSTR pSymbolName;
-       BOOLEAN bSWBpAtAddr;
-    LPSTR pSrc,pFilename,pSrcStart,pSrcEnd;
-    BOOLEAN bForceDisassembly = FALSE;
-
-       DPRINT((0,"Unassemble: CountSwitches: %u, count: %u\n", pArgs->CountSwitches, pArgs->Count));
-    if(pArgs->CountSwitches>1)
-        return TRUE;
-
-    if(pArgs->CountSwitches==1)
-    {
-        if(pArgs->Switch[0] == 'f')
-            bForceDisassembly = TRUE;
-    }
-
-       // we have args
-       if(pArgs->Count==2)
-       {
-               addr=pArgs->Value[1];
-               segment=(USHORT)pArgs->Value[0];
-               addrorg=addrstart=addr;
-               addr=GetLinearAddress(segment,addr);
-
-        usOldDisasmSegment = segment;
-        ulOldDisasmOffset = addr;
-       }
-       else if(pArgs->Count==1)
-       {
-               addr=pArgs->Value[0];
-               segment=CurrentCS;
-               addrorg=addrstart=addr;
-               addr=GetLinearAddress(segment,addr);
-
-        usOldDisasmSegment = segment;
-        ulOldDisasmOffset = addr;
-       }
-       else if(pArgs->Count==0)
-    {
-        segment = usOldDisasmSegment;
-               addrorg=addrstart=addr;
-        addr = GetLinearAddress(usOldDisasmSegment,ulOldDisasmOffset);
-    }
-    else
-        return TRUE;
-
-
-       DPRINT((0,"Unassemble(%0.4X:%0.8X), lastst: %x, lastend:%x\n",segment,addr,ulLastDisassStartAddress,ulLastDisassEndAddress));
-
-       //
-       // unassemble
-    //
-    DisableScroll(SOURCE_WINDOW);
-
-    // if we're inside last disassembly range we only need to move to highlight
-    if(ulLastDisassStartAddress && ulLastDisassEndAddress && addr>=ulLastDisassStartAddress &&
-       addr<ulLastDisassEndAddress )
-       {
-               addr=ulLastDisassStartAddress;
-       }
-       else
-       {
-               ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-       }
-
-    SetForegroundColor(COLOR_TEXT);
-       SetBackgroundColor(COLOR_CAPTION);
-
-       ClrLine(wWindow[SOURCE_WINDOW].y-1);
-
-    ResetColor();
-
-    if(ScanExportsByAddress(&pSymbolName,addr))
-    {
-        SetForegroundColor(COLOR_TEXT);
-           SetBackgroundColor(COLOR_CAPTION);
-               PICE_sprintf(tempCmd," %s ",pSymbolName);
-               PutChar(tempCmd,GLOBAL_SCREEN_WIDTH-1-PICE_strlen(tempCmd),wWindow[SOURCE_WINDOW].y-1);
-        ResetColor();
-    }
-
-    pCurrentMod = FindModuleFromAddress(addr);
-    if(pCurrentMod)
-    {
-        ULONG mod_addr;
-           DPRINT((0,"Unassemble(): pCurrentMod->name = %S\n",pCurrentMod->name));
-        mod_addr = (ULONG)pCurrentMod->BaseAddress;
-
-        pCurrentSymbols = FindModuleSymbols(mod_addr);
-           DPRINT((0,"Unassemble(): pCurrentSymbols = %x\n",(ULONG)pCurrentSymbols));
-    }
-       DPRINT((0,"Unassemble(): pCurrentMod = %x, showsrc: %d\n",pCurrentMod, bShowSrc));
-
-    ulCurrentlyDisplayedLineNumber = 0;
-
-    if(bShowSrc && bForceDisassembly == FALSE && (pSrc = FindSourceLineForAddress(addr,&ulLineNumber,&pSrcStart,&pSrcEnd,&pFilename)) )
-    {
-               DPRINT((0,"FoundSourceLineForAddress: file: %s line: %d\n", pFilename, ulLineNumber));
-        PICE_strcpy(szCurrentFile,pFilename);
-
-        ulCurrentlyDisplayedLineNumber = ulLineNumber;
-
-       Clear(SOURCE_WINDOW);
-
-        // display file name
-        SetForegroundColor(COLOR_TEXT);
-           SetBackgroundColor(COLOR_CAPTION);
-
-        if(PICE_strlen(pFilename)<GLOBAL_SCREEN_WIDTH/2)
-        {
-                   PutChar(pFilename,1,wWindow[SOURCE_WINDOW].y-1);
-        }
-        else
-        {
-            LPSTR p;
-
-            p = strrchr(pFilename,'/');
-            if(!p)
-            {
-                p = pFilename;
-            }
-            else
-            {
-                p++;
-            }
-
-                   PutChar(p,1,wWindow[SOURCE_WINDOW].y-1);
-        }
-
-        ResetColor();
-
-        // display the source
-        if(ulLineNumber>(wWindow[SOURCE_WINDOW].cy/2) )
-        {
-            DisplaySourceFile(pSrcStart,pSrcEnd,ulLineNumber-(wWindow[SOURCE_WINDOW].cy/2),ulLineNumber);
-        }
-        else
-        {
-            DisplaySourceFile(pSrcStart,pSrcEnd,ulLineNumber,ulLineNumber);
-        }
-    }
-    else
-    {
-        *szCurrentFile = 0;
-               DPRINT((0,"Couldn't find source for file\n"));
-        Home(SOURCE_WINDOW);
-        // for each line in the disassembly window
-           for(i=0;i<wWindow[SOURCE_WINDOW].cy;i++)
-           {
-            extern ULONG ulWindowOffset;
-
-                   bSWBpAtAddr = FALSE;
-                   // if there is a potential SW breakpoint at address
-                   // we might have to put back the original opcode
-                   // in order to disassemble correctly.
-                   if(IsSwBpAtAddress(addr))
-                   {
-                           // if INT3 is there, remove it while disassembling
-                           if((bSWBpAtAddr = IsSwBpAtAddressInstalled(addr)))
-                           {
-                                   DeInstallSWBreakpoint(addr);
-                           }
-                   }
-
-                   ClrLine(wWindow[SOURCE_WINDOW].y+i);
-
-                   // invert the line that we're about to execute
-                   if(addr==CurrentEIP)
-                   {
-                SetForegroundColor(COLOR_BACKGROUND);
-                SetBackgroundColor(COLOR_FOREGROUND);
-                           ulLastInvertedAddress = CurrentEIP;
-                   }
-
-                   // output segment:offset address
-                   PICE_sprintf(tempCmd,"%0.4X:%0.8X ",segment,addr);
-                   Print(SOURCE_WINDOW,tempCmd);
-
-            // disassemble a line
-                   addrbefore=addr;
-            if(bCodeOn)
-            {
-                tempCmd[30]=0;
-                       Disasm(&addr,&tempCmd[30]);
-            }
-            else
-            {
-                tempCmd[0]=0;
-                       Disasm(&addr,tempCmd);
-            }
-                   addrorg+=(addr-addrbefore);
-
-            // want to display opcode bytes
-                   if(bCodeOn)
-                   {
-                           ULONG j;
-
-                           for(j=0;j<15;j++)
-                           {
-                    if(j<addr-addrbefore)
-                    {
-                                       if(IsAddressValid(addrbefore+j))
-                                       {
-                                               tempCmd[j*2]=HexDigit[((*(PUCHAR)(addrbefore+j)&0xF0)>>4)];
-                                               tempCmd[j*2+1]=HexDigit[((*(PUCHAR)(addrbefore+j)&0xF))];
-                                       }
-                                       else
-                                       {
-                                               tempCmd[j*2]='?';
-                                               tempCmd[j*2+1]='?';
-                                       }
-                    }
-                    else
-                    {
-                                               tempCmd[j*2]=' ';
-                                               tempCmd[j*2+1]=' ';
-                    }
-                           }
-                   }
-            PICE_strcat(tempCmd,"\n");
-
-            if(ulWindowOffset)
-            {
-                LONG len = PICE_strlen(tempCmd);
-                if(ulWindowOffset < len)
-                    PICE_memcpy(tempCmd,&tempCmd[ulWindowOffset],len-ulWindowOffset);
-                else
-                    tempCmd[0]='\n';
-            }
-
-                   Print(SOURCE_WINDOW,tempCmd);
-
-            if(addrbefore==CurrentEIP)
-                   {
-                           ResetColor();
-                   }
-
-                   // if potential SW breakpoint, undo marked text
-                   if(IsSwBpAtAddress(addrbefore))
-                   {
-                               HatchLine(wWindow[SOURCE_WINDOW].y+i);
-                   }
-
-                   // if breakpoint was installed before disassembly, put it back
-                   if(bSWBpAtAddr)
-                   {
-                           ReInstallSWBreakpoint(addrbefore);
-                   }
-
-           }
-
-        if(ulLastDisassStartAddress==0 && ulLastDisassEndAddress==0)
-        {
-            ulLastDisassStartAddress=addrstart;
-            ulLastDisassEndAddress=addr;
-        }
-
-           if(!IsAddressValid(addrstart))
-           {
-            ulLastDisassStartAddress=0;
-            ulLastDisassEndAddress=0;
-           }
-
-    }
-
-       EnableScroll(SOURCE_WINDOW);
-
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowModules()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowModules)
-{
-       PDEBUG_MODULE pMod;
-       DPRINT((0,"ShowModules()\n"));
-
-       if(BuildModuleList())
-    {
-        pMod = pdebug_module_head;
-        do
-        {
-                       if(pMod->size)
-                       {
-                if(pMod == pCurrentMod)
-                {
-                                   PICE_sprintf(tempCmd,"%.8X - %.8X *%-32S\n",
-                                                   (unsigned int)pMod->BaseAddress,
-                                                   (unsigned int) ((unsigned int)pMod->BaseAddress+pMod->size),pMod->name);
-                }
-                else
-                {
-                                   PICE_sprintf(tempCmd,"%.8X - %.8X  %-32S\n",
-                                                   (unsigned int)pMod->BaseAddress,
-                                                   (unsigned int) ((unsigned int)pMod->BaseAddress+pMod->size),
-                                                       pMod->name);
-                }
-                       }
-            Print(OUTPUT_WINDOW,tempCmd);
-                       if(WaitForKey()==FALSE)
-                               break;
-        }while((pMod = pMod->next)!=pdebug_module_tail);
-    }
-       return TRUE;
-}
-
-//*************************************************************************
-// DecodeVmFlags()
-//
-//*************************************************************************
-//ei FIX THIS!!!!!!!!!!!!!!!!!!
-LPSTR DecodeVmFlags(ULONG flags)
-{
-    ULONG i;
-/*
-#define VM_READ                0x0001
-#define VM_WRITE       0x0002
-#define VM_EXEC                0x0004
-#define VM_SHARED      0x0008
-
-#define VM_MAYREAD     0x0010
-#define VM_MAYWRITE    0x0020
-#define VM_MAYEXEC     0x0040
-#define VM_MAYSHARE    0x0080
-
-#define VM_GROWSDOWN   0x0100
-#define VM_GROWSUP     0x0200
-#define VM_SHM         0x0400
-#define VM_DENYWRITE   0x0800
-
-#define VM_EXECUTABLE  0x1000
-#define VM_LOCKED      0x2000
-#define VM_IO           0x4000
-
-#define VM_STACK_FLAGS 0x0177
-*/
-    static LPSTR flags_syms_on[]={"R","W","X","S","MR","MW","MX","MS","GD","GU","SHM","exe","LOCK","IO",""};
-    static char temp[256];
-
-       // terminate string
-    *temp = 0;
-//ei fix fix fix
-#if 0
-
-    if(flags == VM_STACK_FLAGS)
-    {
-        PICE_strcpy(temp," (STACK)");
-    }
-    else
-    {
-        for(i=0;i<15;i++)
-        {
-            if(flags&0x1)
-            {
-                PICE_strcat(temp," ");
-                PICE_strcat(temp,flags_syms_on[i]);
-            }
-            flags >>= 1;
-        }
-    }
-#endif
-    return temp;
-}
-
-//*************************************************************************
-// ShowVirtualMemory()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowVirtualMemory)
-{
-  PEPROCESS my_current = IoGetCurrentProcess();
-  PLIST_ENTRY current_entry;
-  PMADDRESS_SPACE vma = NULL;
-  MEMORY_AREA* current;
-  char filename[64];
-
-  DPRINT((0,"ShowVirtualMemory()\n"));
-  if( my_current )
-    vma = &(my_current->AddressSpace);
-  if( !vma )
-    vma = my_init_mm;
-  while( vma )
-    {
-      if(pArgs->Count == 0)
-        {
-         PutStatusText("START    END      LENGTH   VMA      TYPE   ATTR");
-         current_entry = vma->MAreaListHead.Flink;
-         while (current_entry != &vma->MAreaListHead)
-            {
-             *filename = 0;
-
-             current = CONTAINING_RECORD(current_entry,
-                                         MEMORY_AREA,
-                                         Entry);
-                               // find the filename
-             if(((current->Type == MEMORY_AREA_SECTION_VIEW) ) &&
-                current->Data.SectionData.Section->FileObject)
-                {
-                 if(IsAddressValid((ULONG)current->Data.SectionData.Section->FileObject->FileName.Buffer) )
-                   PICE_sprintf(filename,"%.64S",current->Data.SectionData.Section->FileObject->FileName.Buffer);
-                }
-
-             PICE_sprintf(tempCmd,"%.8X %.8X %.8X %.8X %x %x    %s\n",
-                          (ULONG)current->BaseAddress,
-                          (ULONG)current->BaseAddress+current->Length,
-                          current->Length,
-                          (ULONG)current,
-                          current->Type, current->Attributes,//DecodeVmFlags(current->Type, current->Attributes),
-                          filename);
-             Print(OUTPUT_WINDOW,tempCmd);
-
-             if(WaitForKey()==FALSE)
-               break;
-             current_entry = current_entry->Flink;
-            }
-        }
-      if( vma == &(my_current->AddressSpace) )
-       vma = my_init_mm;  // switch to kernel memory area
-      else vma = 0;        // if we already did kernel, end loop
-    }
-  return TRUE;
-}
-
-//*************************************************************************
-// Ver()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(Ver)
-{
-       //ei add kernel version info??!!
-    PICE_sprintf(tempCmd,"pICE: version %u.%u (build %u) for Reactos\n",
-                 PICE_MAJOR_VERSION,
-                 PICE_MINOR_VERSION,
-                 PICE_BUILD);
-
-       Print(OUTPUT_WINDOW,tempCmd);
-
-/*    PICE_sprintf(tempCmd,"pICE: loaded on %s kernel release %s\n",
-               system_utsname.sysname,
-               system_utsname.release);
- */
-       Print(OUTPUT_WINDOW,tempCmd);
-       Print(OUTPUT_WINDOW,"pICE: written by Klaus P. Gerlicher and Goran Devic.\n");
-       Print(OUTPUT_WINDOW,"pICE: ported to Reactos by Eugene Ingerman.\n");
-
-       return TRUE;
-}
-
-//*************************************************************************
-// Hboot()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(Hboot)
-{
-       // nudge the reset line through keyboard controller
-       __asm__("\n\t \
-               movb $0xFE,%al\n\t \
-               outb %al,$0x64");
-       // never gets here
-       return TRUE;
-}
-
-//*************************************************************************
-// SetSrcDisplay()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SetSrcDisplay)
-{
-    ARGS Args;
-
-       if(pArgs->Count==0)
-       {
-               bShowSrc=bShowSrc?FALSE:TRUE;
-        PICE_memset(&Args,0,sizeof(ARGS));
-        // make unassembler refresh all again
-        ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-               Args.Count=0;
-               Unassemble(&Args);
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// I3here()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(I3here)
-{
-       if(pArgs->Count==1)
-       {
-               if(pArgs->Value[0]==1)
-               {
-                       if(!bInt3Here)
-                       {
-                               bInt3Here=TRUE;
-                               Print(OUTPUT_WINDOW,"I3HERE is now ON\n");
-                       }
-                       else
-                               Print(OUTPUT_WINDOW,"I3HERE is already ON\n");
-               }
-               else if(pArgs->Value[0]==0)
-               {
-                       if(bInt3Here)
-                       {
-                               bInt3Here=FALSE;
-                               Print(OUTPUT_WINDOW,"I3HERE is now OFF\n");
-                       }
-                       else
-                               Print(OUTPUT_WINDOW,"I3HERE is already OFF\n");
-               }
-       }
-       else if(pArgs->Count==0)
-       {
-               if(bInt3Here)
-               {
-                       Print(OUTPUT_WINDOW,"I3HERE is ON\n");
-               }
-               else
-               {
-                       Print(OUTPUT_WINDOW,"I3HERE is OFF\n");
-               }
-       }
-       // never gets here
-       return TRUE;
-}
-
-COMMAND_PROTOTYPE(I1here)
-{
-       if(pArgs->Count==1)
-       {
-               if(pArgs->Value[0]==1)
-               {
-                       if(!bInt1Here)
-                       {
-                               bInt1Here=TRUE;
-                               Print(OUTPUT_WINDOW,"I1HERE is now ON\n");
-                       }
-                       else
-                               Print(OUTPUT_WINDOW,"I1HERE is already ON\n");
-               }
-               else if(pArgs->Value[0]==0)
-               {
-                       if(bInt1Here)
-                       {
-                               bInt1Here=FALSE;
-                               Print(OUTPUT_WINDOW,"I1HERE is now OFF\n");
-                       }
-                       else
-                               Print(OUTPUT_WINDOW,"I1HERE is already OFF\n");
-               }
-       }
-       else if(pArgs->Count==0)
-       {
-               if(bInt1Here)
-               {
-                       Print(OUTPUT_WINDOW,"I1HERE is ON\n");
-               }
-               else
-               {
-                       Print(OUTPUT_WINDOW,"I1HERE is OFF\n");
-               }
-       }
-       // never gets here
-       return TRUE;
-}
-
-COMMAND_PROTOTYPE(NextInstr)
-{
-    static char tempDisasm[256];
-    ULONG addr,addrbefore;
-
-       bNeedToFillBuffer=FALSE;
-
-       if(!pArgs->Count)
-       {
-               addr=addrbefore=GetLinearAddress(CurrentCS,CurrentEIP);
-               DPRINT((0,"addr before %.8X\n",addrbefore));
-               Disasm(&addr,tempDisasm);
-               DPRINT((0,"addr after %.8X\n",addr));
-               CurrentEIP=CurrentEIP+(addr-addrbefore);
-               // display register contents
-               DisplayRegs();
-               // unassemble
-               DPRINT((0,"new CS:EIP %04.x:%.8X\n",CurrentCS,CurrentEIP));
-        PICE_memset(pArgs,0,sizeof(ARGS));
-        // make unassembler refresh all again
-        ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-               pArgs->Count=2;
-               pArgs->Value[0]=(ULONG)CurrentCS;
-               pArgs->Value[1]=CurrentEIP;
-               Unassemble(pArgs);
-       }
-       bNeedToFillBuffer=TRUE;
-       return TRUE;
-}
-
-COMMAND_PROTOTYPE(SetGetRegisters)
-{
-       ULONG i;
-
-       if(pArgs->Count==0)
-       {
-               // display whole set
-               for(i=0;RegKeyWords[i].pValue!=0;i++)
-               {
-                       switch(RegKeyWords[i].ulSize)
-                       {
-                               case 1:
-                                       PICE_sprintf(tempCmd,"%s = %.8X\n",RegKeyWords[i].KeyWord,*(PUCHAR)(RegKeyWords[i].pValue));
-                                       break;
-                               case 2:
-                                       PICE_sprintf(tempCmd,"%s = %.8X\n",RegKeyWords[i].KeyWord,*(PUSHORT)(RegKeyWords[i].pValue));
-                                       break;
-                               case 4:
-                                       PICE_sprintf(tempCmd,"%s = %.8X\n",RegKeyWords[i].KeyWord,*(PULONG)(RegKeyWords[i].pValue));
-                                       break;
-                       }
-                       Print(OUTPUT_WINDOW,tempCmd);
-                       if(WaitForKey()==FALSE)break;
-               }
-       }
-       else if(pArgs->Count==1)
-       {
-               // display selected register
-               for(i=0;RegKeyWords[i].pValue!=0;i++)
-               {
-                       if(PICE_strcmpi(pArgs->pToken[0],RegKeyWords[i].KeyWord)==0)
-                       {
-                               switch(RegKeyWords[i].ulSize)
-                               {
-                                       case 1:
-                                               PICE_sprintf(tempCmd,"%s = %.2X\n",RegKeyWords[i].KeyWord,*(PUCHAR)(RegKeyWords[i].pValue));
-                                               break;
-                                       case 2:
-                                               PICE_sprintf(tempCmd,"%s = %.4X\n",RegKeyWords[i].KeyWord,*(PUSHORT)(RegKeyWords[i].pValue));
-                                               break;
-                                       case 4:
-                                               PICE_sprintf(tempCmd,"%s = %.8X\n",RegKeyWords[i].KeyWord,*(PULONG)(RegKeyWords[i].pValue));
-                                               break;
-                               }
-                               Print(OUTPUT_WINDOW,tempCmd);
-                               break;
-                       }
-               }
-       }
-       else if(pArgs->Count==2)
-       {
-               // set selected register to value
-               for(i=0;RegKeyWords[i].pValue!=0;i++)
-               {
-                       if(PICE_strcmpi(pArgs->pToken[0],RegKeyWords[i].KeyWord)==0)
-                       {
-                               switch(RegKeyWords[i].ulSize)
-                               {
-                                       case 1:
-                                               *(PUCHAR)(RegKeyWords[i].pValue)=(UCHAR)pArgs->Value[1];
-                                               break;
-                                       case 2:
-                                               *(PUSHORT)(RegKeyWords[i].pValue)=(USHORT)pArgs->Value[1];
-                                               break;
-                                       case 4:
-                                               *(PULONG)(RegKeyWords[i].pValue)=(ULONG)pArgs->Value[1];
-                                               break;
-                               }
-                               DisplayRegs();
-                RepaintSource();
-                               break;
-                       }
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// SetCodeDisplay()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SetCodeDisplay)
-{
-    ARGS Args;
-
-       if(pArgs->Count==0)
-       {
-               bCodeOn=bCodeOn?FALSE:TRUE;
-
-        PICE_memset(&Args,0,sizeof(ARGS));
-               Args.Count=0;
-        // make unassembler refresh all again
-        ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-               Unassemble(&Args);
-       }
-       else if(pArgs->Count==1)
-       {
-        bCodeOn=(pArgs->Value[0]==0)?FALSE:TRUE;
-
-        PICE_memset(&Args,0,sizeof(ARGS));
-               Args.Count=0;
-        // make unassembler refresh all again
-        ulLastDisassStartAddress=ulLastDisassEndAddress=0;
-               Unassemble(&Args);
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowCPU()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowCPU)
-{
-ULONG i;
-
-       for(i=0;CPUInfo[i].pValue!=NULL;i++)
-       {
-               PICE_sprintf(tempCmd,"%s = %.8X\n",CPUInfo[i].Name,*(CPUInfo[i].pValue));
-               Print(OUTPUT_WINDOW,tempCmd);
-               if(WaitForKey()==FALSE)break;
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// WalkStack()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(WalkStack)
-{
-       if(!pArgs->Count)
-       {
-               IntelStackWalk(CurrentEIP,CurrentEBP,CurrentESP);
-       }
-
-       return TRUE;
-}
-
-//*************************************************************************
-// PokeDword()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PokeDword)
-{
-       ULONG ulData;
-
-       // read old data
-    ulData = ReadPhysMem(pArgs->Value[1],sizeof(ULONG));
-       PICE_sprintf(tempCmd,"value @ %.8X was %.8X\n",pArgs->Value[1],ulData);
-       Print(OUTPUT_WINDOW,tempCmd);
-
-    // write new data
-       WritePhysMem(pArgs->Value[1],pArgs->Value[2],sizeof(ULONG));
-
-    // read check
-       ulData = ReadPhysMem(pArgs->Value[1],sizeof(ULONG));
-       PICE_sprintf(tempCmd,"value @ %.8X = %.8X\n",pArgs->Value[1],ulData);
-       Print(OUTPUT_WINDOW,tempCmd);
-
-       return TRUE;
-}
-
-//*************************************************************************
-// PokeMemory()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PokeMemory)
-{
-    DPRINT((0,"PokeMemory()\n"));
-       DPRINT((0,"PokeMemory(): value[0] = %.8X value[1] = %.8X value[3] = %.8X count = %.8X\n",pArgs->Value[0],pArgs->Value[1],pArgs->Value[2],pArgs->Count));
-
-    // must be three parameters
-    if(pArgs->Count == 3)
-    {
-        switch(pArgs->Value[0])
-        {
-            case 4:
-                return PokeDword(pArgs);
-            default:
-            case 1:
-            case 2:
-                break;
-        }
-    }
-       else
-       {
-               Print(OUTPUT_WINDOW,"you need to supply a physical address and datum to write!\n");
-       }
-
-    return TRUE;
-}
-
-
-//*************************************************************************
-// PeekDword()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PeekDword)
-{
-       ULONG ulData;
-
-       ulData = ReadPhysMem(pArgs->Value[1],sizeof(ULONG));
-       PICE_sprintf(tempCmd,"%.8X\n",ulData);
-       Print(OUTPUT_WINDOW,tempCmd);
-
-       return TRUE;
-}
-
-//*************************************************************************
-// PeekWord()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PeekWord)
-{
-       USHORT usData;
-
-       usData = (USHORT)ReadPhysMem(pArgs->Value[1],sizeof(USHORT));
-       PICE_sprintf(tempCmd,"%.4X\n",usData);
-       Print(OUTPUT_WINDOW,tempCmd);
-
-       return TRUE;
-}
-
-//*************************************************************************
-// PeekByte()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PeekByte)
-{
-       UCHAR ucData;
-
-       ucData = (UCHAR)ReadPhysMem(pArgs->Value[1],sizeof(UCHAR));
-       PICE_sprintf(tempCmd,"%.2X\n",ucData);
-       Print(OUTPUT_WINDOW,tempCmd);
-
-       return TRUE;
-}
-
-//*************************************************************************
-// PeekMemory()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(PeekMemory)
-{
-    DPRINT((0,"PeekMemory()\n"));
-       DPRINT((0,"PeekMemory(): value[0] = %.8X value[1] = %.8X count = %.8X\n",pArgs->Value[0],pArgs->Value[1],pArgs->Count));
-
-    if(pArgs->Count == 2)
-    {
-        switch(pArgs->Value[0])
-        {
-            case 1:
-                return PeekByte(pArgs);
-            case 2:
-                return PeekWord(pArgs);
-            case 4:
-                return PeekDword(pArgs);
-            default:
-                break;
-        }
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// UnassembleAtCurrentEip()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(UnassembleAtCurrentEip)
-{
-    PICE_memset(pArgs,0,sizeof(ARGS));
-    pArgs->Count = 2;
-    pArgs->Value[0] = CurrentCS;
-    pArgs->Value[1] = CurrentEIP;
-    Unassemble(pArgs);
-    return TRUE;
-}
-
-//*************************************************************************
-// SwitchTables()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SwitchTables)
-{
-    ULONG i;
-
-    DPRINT((0,"SwitchTables()\n"));
-
-    // no arguments -> display load symbol tables
-    if(!pArgs->Count)
-    {
-        for(i=0;i<DIM(apSymbols);i++)
-        {
-            if(apSymbols[i])
-            {
-                if(apSymbols[i] == pCurrentSymbols)
-                    PICE_sprintf(tempCmd,"*%-32S @ %.8X (%5u source files)\n",apSymbols[i]->name,(ULONG)apSymbols[i],apSymbols[i]->ulNumberOfSrcFiles);
-                else
-                    PICE_sprintf(tempCmd," %-32S @ %.8X (%5u source files)\n",apSymbols[i]->name,(ULONG)apSymbols[i],apSymbols[i]->ulNumberOfSrcFiles);
-                Print(OUTPUT_WINDOW,tempCmd);
-                if(WaitForKey()==FALSE)break;
-            }
-        }
-    }
-    // 1 argument -> set new current symbols
-    else if(pArgs->Count == 1)
-    {
-      PDEBUG_MODULE pTempMod;
-      char temp[DEBUG_MODULE_NAME_LEN];
-
-      pCurrentSymbols = (PICE_SYMBOLFILE_HEADER*)pArgs->Value[0];
-      CopyWideToAnsi( temp, pCurrentSymbols->name );
-
-      DPRINT((0,"TableSwitchSym: pCurrentSymbols: %x, Name: %s\n", pCurrentSymbols, temp));
-
-      pTempMod = IsModuleLoaded(temp);
-      if( pTempMod )
-       pCurrentMod = pTempMod;
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// SwitchFiles()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SwitchFiles)
-{
-    PICE_SYMBOLFILE_SOURCE* pSrc;
-    ULONG i;
-    LPSTR p;
-
-    DPRINT((0,"SwitchFiles()\n"));
-    // no arguments -> show files for current symbols
-    if(!pArgs->Count)
-    {
-        if(pCurrentSymbols && pCurrentSymbols->ulNumberOfSrcFiles)
-        {
-            LPSTR pCurrentFile=NULL;
-
-            // find out the current file name
-            if(*szCurrentFile!=0)
-            {
-                if((pCurrentFile = strrchr(szCurrentFile,'/')) )
-                {
-                    pCurrentFile++;
-                }
-                else
-                {
-                    pCurrentFile = szCurrentFile;
-                }
-            }
-
-            pSrc = (PICE_SYMBOLFILE_SOURCE*)((ULONG)pCurrentSymbols + pCurrentSymbols->ulOffsetToSrcFiles);
-
-            for(i=0;i<pCurrentSymbols->ulNumberOfSrcFiles;i++)
-            {
-                if(pCurrentFile)
-                {
-                    if((p = strrchr(pSrc->filename,'/')) )
-                    {
-                        if(PICE_strcmpi(p+1,pCurrentFile)==0)
-                            PICE_sprintf(tempCmd,"*%-32s @ %.8X\n",p+1,(ULONG)pSrc);
-                        else
-                            PICE_sprintf(tempCmd," %-32s @ %.8X\n",p+1,(ULONG)pSrc);
-                    }
-                    else
-                    {
-                        if(PICE_strcmpi(pSrc->filename,pCurrentFile)==0)
-                            PICE_sprintf(tempCmd,"*%-32s @ %.8X\n",pSrc->filename,(ULONG)pSrc);
-                        else
-                            PICE_sprintf(tempCmd," %-32s @ %.8X\n",pSrc->filename,(ULONG)pSrc);
-                    }
-                }
-                else
-                {
-                    if((p = strrchr(pSrc->filename,'/')) )
-                    {
-                        PICE_sprintf(tempCmd,"%-32s @ %.8X\n",p+1,(ULONG)pSrc);
-                    }
-                    else
-                    {
-                        PICE_sprintf(tempCmd,"%-32s @ %.8X\n",pSrc->filename,(ULONG)pSrc);
-                    }
-                }
-                Print(OUTPUT_WINDOW,tempCmd);
-
-                if(WaitForKey()==FALSE)break;
-                (LPSTR)pSrc += pSrc->ulOffsetToNext;
-            }
-        }
-        else
-            Print(OUTPUT_WINDOW,"No source files available!\n");
-    }
-    // 1 argument -> argument is pointer PICE_SYMBOLFILE_SOURCE struct ->
-    // set current file and show it
-    else if(pArgs->Count == 1)
-    {
-        PICE_SYMBOLFILE_SOURCE* pSrc = (PICE_SYMBOLFILE_SOURCE*)pArgs->Value[0];
-        LPSTR pFilename = pSrc->filename;
-
-           ClrLine(wWindow[SOURCE_WINDOW].y-1);
-
-        if(PICE_strlen(pFilename)<GLOBAL_SCREEN_WIDTH/2)
-        {
-                   PutChar(pFilename,1,wWindow[SOURCE_WINDOW].y-1);
-        }
-        else
-        {
-            LPSTR p;
-
-            p = strrchr(pFilename,'/');
-            if(!p)
-            {
-                p = pFilename;
-            }
-            else
-            {
-                p++;
-            }
-
-                   PutChar(p,1,wWindow[SOURCE_WINDOW].y-1);
-        }
-
-        // set new current file
-        PICE_strcpy(szCurrentFile,pFilename);
-
-        ulCurrentlyDisplayedLineNumber = 1;
-
-        DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
-                          (LPSTR)pSrc+pSrc->ulOffsetToNext,
-                          1,
-                          -1);
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// ShowLocals()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowLocals)
-{
-       PLOCAL_VARIABLE p;
-
-       if(pArgs->Count==0)
-       {
-               p = FindLocalsByAddress(GetLinearAddress(CurrentCS,CurrentEIP));
-               DPRINT((0,"ShowLocals: %x\n", p));
-               if(p)
-               {
-                       DPRINT((0,"ShowLocals: name %s, type_name %s\n", p->name, p->type_name));
-                       while(PICE_strlen(p->name))
-                       {
-                if(!p->bRegister)
-                {
-                               PICE_sprintf(tempCmd,"[EBP%.4d / #%u] %x %s %s \n",p->offset,p->line,p->value,p->type_name,p->name);
-                }
-                else
-                {
-                               PICE_sprintf(tempCmd,"[%-8s / #%u] %x %s %s #%u\n",LocalVarRegs[p->offset],p->line,p->value,p->type_name,p->name);
-                }
-                               Print(OUTPUT_WINDOW,tempCmd);
-                               p++;
-                       }
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowSymbols()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowSymbols)
-{
-    PICE_SYMBOLFILE_HEADER* pSymbols;
-    ULONG index,addr;
-    LPSTR pSearchString,pName,pFind;
-
-    // no args -> list full symbols for current module
-    if(!pArgs->Count)
-    {
-        // have current module ?
-        if(pCurrentMod)
-        {
-            DPRINT((0,"ShowSymbols(): full listing of symbols for %S\n",pCurrentMod->name));
-            addr = (ULONG)pCurrentMod->BaseAddress;
-
-            if((pSymbols = FindModuleSymbols(addr)) )
-            {
-                PICE_sprintf(tempCmd,"symbols for module \"%S\"\n",pCurrentMod->name);
-                Print(OUTPUT_WINDOW,tempCmd);
-
-                index = 0;
-                while((index = ListSymbolStartingAt(pCurrentMod,pSymbols,index,tempCmd)))
-                {
-                    Print(OUTPUT_WINDOW,tempCmd);
-                    if(WaitForKey()==FALSE)break;
-                }
-            }
-        }
-    }
-    // partial name
-    else if(pArgs->Count == 1)
-    {
-        if(pCurrentMod)
-        {
-            addr = (ULONG)pCurrentMod->BaseAddress;
-
-            if((pSymbols = FindModuleSymbols(addr)))
-            {
-                pSearchString = (LPSTR)pArgs->Value[0];
-
-                PICE_sprintf(tempCmd,"symbols for module \"%S\" (searching for \"%s\")\n",pCurrentMod->name,pSearchString);
-                Print(OUTPUT_WINDOW,tempCmd);
-
-                if(pSearchString)
-                {
-                    if(*pSearchString=='*' && pSearchString[PICE_strlen(pSearchString)-1]=='*')
-                    {
-                        pSearchString[PICE_strlen(pSearchString)-1] = 0;
-                        pSearchString++;
-                        index = 0;
-                        while((index = ListSymbolStartingAt(pCurrentMod,pSymbols,index,tempCmd)))
-                        {
-                            pName = strrchr(tempCmd,' ');
-                            pName++;
-                            pFind = strstr(pName,pSearchString);
-                            if(pFind)
-                            {
-                                Print(OUTPUT_WINDOW,tempCmd);
-                                if(WaitForKey()==FALSE)break;
-                            }
-                        }
-                        // TODO
-                    }
-                    else if(pSearchString[PICE_strlen(pSearchString)-1]=='*')
-                    {
-                        pSearchString[PICE_strlen(pSearchString)-1] = 0;
-                        index = 0;
-
-                                               index = ListSymbolStartingAt(pCurrentMod,pSymbols,index,tempCmd);
-                                               if(index)
-                        {
-                                                       do
-                                                       {
-                                                               pName = strrchr(tempCmd,' ');
-                                                               pName++;
-                                                               pFind = strstr(pName,pSearchString);
-                                                               if(pFind && (((ULONG)pName-(ULONG)pFind)==0) )
-                                                               {
-                                                                       Print(OUTPUT_WINDOW,tempCmd);
-                                                                       if(WaitForKey()==FALSE)break;
-                                                               }
-                                                       }while((index = ListSymbolStartingAt(pCurrentMod,pSymbols,index,tempCmd)));
-                                               }
-                    }
-                }
-            }
-        }
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// EvaluateExpression()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(EvaluateExpression)
-{
-       PICE_SYMBOLFILE_HEADER* pSymbols;
-    ULONG addr;
-
-       if(pArgs->Count == 1)
-       {
-               if(pCurrentMod)
-               {
-            addr = (ULONG)pCurrentMod->BaseAddress;
-
-                       if( (pSymbols = FindModuleSymbols(addr) ) )
-                       {
-                               DPRINT((0,"EvaluateExpression: %s\n", (LPSTR)pArgs->Value[0]));
-                               Evaluate(pSymbols,(LPSTR)pArgs->Value[0]);
-                       }
-               }
-       }
-       return TRUE;
-}
-
-//*************************************************************************
-// SizeCodeWindow()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SizeCodeWindow)
-{
-    ULONG NewHeight,TotalHeight;
-
-    if(pArgs->Count == 1)
-    {
-        NewHeight = pArgs->Value[0];
-
-        TotalHeight = wWindow[SOURCE_WINDOW].cy +
-                      wWindow[OUTPUT_WINDOW].cy;
-
-        if(NewHeight < TotalHeight)
-        {
-            if(wWindow[SOURCE_WINDOW].cy != NewHeight)
-                       {
-                               wWindow[SOURCE_WINDOW].cy = NewHeight;
-                               wWindow[OUTPUT_WINDOW].y = wWindow[SOURCE_WINDOW].y + wWindow[SOURCE_WINDOW].cy + 1;
-                               wWindow[OUTPUT_WINDOW].cy = TotalHeight - NewHeight;
-
-                               RepaintDesktop();
-                       }
-        }
-    }
-    else
-    {
-        PICE_sprintf(tempCmd,"code window at position %u has %u lines \n",wWindow[SOURCE_WINDOW].y,wWindow[SOURCE_WINDOW].cy);
-        Print(OUTPUT_WINDOW,tempCmd);
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// SizeDataWindow()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SizeDataWindow)
-{
-    ULONG NewHeight,TotalHeight;
-
-    if(pArgs->Count)
-    {
-        NewHeight = pArgs->Value[0];
-
-        TotalHeight = wWindow[DATA_WINDOW].cy +
-                      wWindow[SOURCE_WINDOW].cy;
-
-        if(NewHeight < TotalHeight)
-        {
-            if(wWindow[DATA_WINDOW].cy != NewHeight)
-                       {
-                               wWindow[DATA_WINDOW].cy = NewHeight;
-                               wWindow[SOURCE_WINDOW].y = wWindow[DATA_WINDOW].y + wWindow[DATA_WINDOW].cy + 1;
-                               wWindow[SOURCE_WINDOW].cy = TotalHeight - NewHeight;
-
-                               RepaintDesktop();
-                       }
-        }
-    }
-    else
-    {
-        PICE_sprintf(tempCmd,"data window has %u lines \n",wWindow[DATA_WINDOW].cy);
-        Print(OUTPUT_WINDOW,tempCmd);
-    }
-
-    return TRUE;
-}
-
-//*************************************************************************
-// ClearScreen()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ClearScreen)
-{
-    EmptyRingBuffer();
-
-    Clear(OUTPUT_WINDOW);
-    CheckRingBuffer();
-
-    return TRUE;
-}
-
-//*************************************************************************
-// ShowMappings()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowMappings)
-{
-#if 0
-       ULONG ulPageDir;
-       ULONG ulPageTable;
-       ULONG address;
-       ULONG phys_addr;
-       pgd_t * pPGD;
-       pmd_t * pPMD;
-       pte_t * pPTE;
-       struct mm_struct* p = NULL;
-       struct task_struct* my_current = (struct task_struct*)0xFFFFE000;
-
-    DPRINT((0,"ShowMappings()\n"));
-
-       if(pArgs->Count == 1)
-       {
-               // We're in DebuggerShell(), so we live on a different stack
-               (ULONG)my_current &= ulRealStackPtr;
-
-        // in case we have a user context we use it's mm_struct
-               if(my_current->mm)
-        {
-            p = my_current->mm;
-        }
-        // no user context -> use kernel's context
-               else
-        {
-               p = my_init_mm;
-        }
-
-        // get the requested address from arguments
-               phys_addr = pArgs->Value[0];
-
-        DPRINT((0,"ShowMappings(): p = %X phys_addr = %X\n",(ULONG)p,phys_addr));
-
-        // for every page directory
-               for(ulPageDir=0;ulPageDir<1024;ulPageDir++)
-               {
-            address = (ulPageDir<<22);
-
-            // get the page directory for the address
-                       pPGD = pgd_offset(p,address);
-            // if page dir present
-                       if(pPGD && pgd_val(*pPGD)&_PAGE_PRESENT)
-                       {
-                DPRINT((0,"ShowMappings(): page directory present for %x\n",address));
-                               // not large page
-                       if(!(pgd_val(*pPGD)&_PAGE_4M))
-                               {
-                    DPRINT((0,"ShowMappings(): page directory for 4k pages\n"));
-                               for(ulPageTable=0;ulPageTable<1024;ulPageTable++)
-                                       {
-                                       address = (ulPageDir<<22)|(ulPageTable<<12);
-
-                                               pPMD = pmd_offset(pPGD,address);
-                                               if(pPMD)
-                                               {
-                                                       pPTE = pte_offset(pPMD,address);
-                                                       if(pPTE)
-                                                       {
-                                if(*(PULONG)pPTE & _PAGE_PRESENT)
-                                {
-                                                                   ULONG ulPte = *(PULONG)pPTE & 0xFFFFF000;
-
-                                                                   if(ulPte == (phys_addr & 0xFFFFF000))
-                                                                   {
-                                                                           PICE_sprintf(tempCmd,"%.8X\n",address+(phys_addr&0xFFF));
-                                                                           Print(OUTPUT_WINDOW,tempCmd);
-                                                                           if(WaitForKey()==FALSE)return TRUE;
-                                                                   }
-                                }
-                                                       }
-                                               }
-                                       }
-                               }
-                               // large page
-                               else
-                               {
-                                       address = (ulPageDir<<22);
-                                       if((pgd_val(*pPGD)&0xFFC00000) == (phys_addr & 0xFFC00000) )
-                                       {
-                        if( ((address|(phys_addr&0x7FFFFF))&~TASK_SIZE) == phys_addr)
-                               PICE_sprintf(tempCmd,"%.8X (identity map %.8X+%.8X)\n",address|(phys_addr&0x7FFFFF),TASK_SIZE,phys_addr);
-                        else
-                               PICE_sprintf(tempCmd,"%.8X\n",address|(phys_addr&0x7FFFFF));
-                                               Print(OUTPUT_WINDOW,tempCmd);
-                                               if(WaitForKey()==FALSE)return TRUE;
-                                       }
-                               }
-                       }
-               }
-       }
-#endif
-       PICE_sprintf(tempCmd,"Not implemented yet!\n");
-       Print(OUTPUT_WINDOW,tempCmd);
-       return TRUE;
-}
-
-//*************************************************************************
-// ShowTimers()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowTimers)
-{
-
-       return TRUE;
-}
-
-//*************************************************************************
-// FindPCIVendorName()
-//
-//*************************************************************************
-LPSTR FindPCIVendorName(USHORT vendorid)
-{
-    ULONG i;
-
-    for(i=0;i<DIM(PCIVendorIDs);i++)
-    {
-        if(vendorid == PCIVendorIDs[i].vendorid)
-            return PCIVendorIDs[i].vendor_name;
-    }
-
-    return NULL;
-}
-
-//*************************************************************************
-// ShowPCI()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowPCI)
-{
-    ULONG oldCF8,data,bus,dev,reg,i,ulNumBaseAddresses,bus_req=0,dev_req=0;
-    PCI_NUMBER pciNumber;
-    PCI_COMMON_CONFIG pciConfig,*ppciConfig;
-    PULONG p;
-    LPSTR pVendorName;
-    char temp[32];
-    BOOLEAN bShowAll = FALSE,bUseDev=TRUE,bUseBus=TRUE;
-
-
-    DPRINT((0,"ShowPCI()\n"));
-
-    if(pArgs->CountSwitches>1)
-        return TRUE;
-
-    if(pArgs->CountSwitches==1)
-    {
-        if(pArgs->Switch[0] == 'a')
-            bShowAll = TRUE;
-    }
-
-    if(pArgs->Count < 3)
-    {
-        if(pArgs->Count > 0)
-        {
-            bUseBus = FALSE;
-            bus_req = pArgs->Value[0];
-        }
-        if(pArgs->Count > 1)
-        {
-            bUseDev = FALSE;
-            dev_req = pArgs->Value[1];
-        }
-
-        // save old config space selector
-           oldCF8 = inl((PULONG)0xcf8);
-
-        for(bus=0;bus<256;bus++)
-        {
-            for(dev=0;dev<32;dev++)
-            {
-                if(!((bUseDev || dev == dev_req) &&
-                    (bUseBus || bus == bus_req) ))
-                    continue;
-
-                pciNumber.u.AsUlong     = 0;
-                pciNumber.u.bits.dev    = dev;
-                pciNumber.u.bits.bus    = bus;
-                pciNumber.u.bits.func   = 0;
-                pciNumber.u.bits.ce     = 1;
-                   outl(pciNumber.u.AsUlong,(PULONG)0xcf8);
-                   data = inl((PULONG)0xcfc);
-
-                if(data != 0xFFFFFFFF) // valid device
-                {
-                    if((pVendorName = FindPCIVendorName((USHORT)data)) )
-                    {
-                        PICE_sprintf(tempCmd,"Bus%-8uDev%-8u === %.4X %.4X %s ====\n",bus,dev,(USHORT)data,(USHORT)(data>>16),pVendorName);
-                    }
-                    else
-                    {
-                        PICE_sprintf(tempCmd,"Bus%-8uDev%-8u === %.4X %.4X N/A ====\n",bus,dev,(USHORT)data,(USHORT)(data>>16));
-                    }
-                    Print(OUTPUT_WINDOW,tempCmd);
-                    if(WaitForKey()==FALSE)goto CommonShowPCIExit;
-
-                    p = (PULONG)&pciConfig;
-                    for(reg=0;reg<sizeof(PCI_COMMON_CONFIG)/sizeof(ULONG);reg++)
-                    {
-                        pciNumber.u.AsUlong     = 0;
-                        pciNumber.u.bits.dev    = dev;
-                        pciNumber.u.bits.bus    = bus;
-                        pciNumber.u.bits.func   = 0;
-                        pciNumber.u.bits.reg    = reg;
-                        pciNumber.u.bits.ce     = 1;
-
-                           outl(pciNumber.u.AsUlong,(PULONG)0xcf8);
-                           *p++ = inl((PULONG)0xcfc);
-                    }
-                    PICE_sprintf(tempCmd,"SubVendorId %.4X SubSystemId %.4X\n",pciConfig.u.type0.SubVendorID,pciConfig.u.type0.SubSystemID);
-                    Print(OUTPUT_WINDOW,tempCmd);
-                    if(WaitForKey()==FALSE)goto CommonShowPCIExit;
-
-                    if(bShowAll)
-                    {
-                        for(ulNumBaseAddresses=0,i=0;i<6;i++)
-                        {
-                            if(pciConfig.u.type0.BaseAddresses[i] != 0)
-                                ulNumBaseAddresses++;
-                        }
-                        if(ulNumBaseAddresses)
-                        {
-                            Print(OUTPUT_WINDOW,"BaseAddresses:");
-                            tempCmd[0] = 0;
-                            for(i=0;i<6;i++)
-                            {
-                                if(pciConfig.u.type0.BaseAddresses[i] != 0)
-                                {
-                                    PICE_sprintf(temp," %u:%.8X",i,pciConfig.u.type0.BaseAddresses[i]);
-                                    PICE_strcat(tempCmd,temp);
-                                }
-                            }
-                            Print(OUTPUT_WINDOW,tempCmd);
-                            Print(OUTPUT_WINDOW,"\n");
-                            if(WaitForKey()==FALSE)goto CommonShowPCIExit;
-                        }
-                        ppciConfig = &pciConfig;
-                                               #if 0
-                                                       // sedwards
-                        SHOW_FIELD_WORD(ppciConfig,Status,TRUE);
-                        SHOW_FIELD_WORD(ppciConfig,Command,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,RevisionID,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,ProgIf,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,BaseClass,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,SubClass,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,CacheLineSize,TRUE);
-                        SHOW_FIELD_BYTE(ppciConfig,LatencyTimer,TRUE);
-                                               #endif
-                    }
-                }
-            }
-        }
-
-CommonShowPCIExit:
-        // restore old config space selector
-           outl(oldCF8,(PULONG)0xcf8);
-
-    }
-    else if(pArgs->Count == 1)
-    {
-    }
-
-       return TRUE;
-}
-
-//*************************************************************************
-// SetKeyboardLayout()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SetKeyboardLayout)
-{
-    PKEYBOARD_LAYOUT layout;
-
-    ENTER_FUNC();
-
-    layout = GetKeyboardLayout();
-
-    switch(pArgs->Count)
-    {
-        case 0:
-            PICE_sprintf(tempCmd,"current layout = %s\n", layout->name);
-            Print(OUTPUT_WINDOW,tempCmd);
-            break;
-        case 1:
-            layout = SetKeyboardLayoutByName((LPSTR)pArgs->Value[0]);
-            PICE_sprintf(tempCmd,"current layout = %s\n", layout->name);
-            Print(OUTPUT_WINDOW,tempCmd);
-            break;
-    }
-
-    LEAVE_FUNC();
-
-    return TRUE;
-}
-
-//*************************************************************************
-// ShowSysCallTable()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowSysCallTable)
-{
-#if 0
-    LPSTR pName;
-    ULONG i;
-
-    ENTER_FUNC();
-
-    if(pArgs->Count == 0)
-    {
-        PICE_sprintf(tempCmd,"%u system calls\n",190);
-        Print(OUTPUT_WINDOW,tempCmd);
-        if(WaitForKey()!=FALSE)
-            for(i=0;i<190;i++)
-            {
-                if((pName = FindFunctionByAddress(sys_call_table[i],NULL,NULL)) )
-                {
-                    PICE_sprintf(tempCmd,"%-.3u: %.8X (%s)\n",i,sys_call_table[i],pName);
-                }
-                else
-                {
-                    PICE_sprintf(tempCmd,"%-.3u: %.8X (%s)\n",i,sys_call_table[i],pName);
-                }
-                Print(OUTPUT_WINDOW,tempCmd);
-                if(WaitForKey()==FALSE)
-                    break;
-            }
-    }
-    else if(pArgs->Count == 1)
-    {
-        i = pArgs->Value[0];
-        if(i<190)
-        {
-            if((pName = FindFunctionByAddress(sys_call_table[i],NULL,NULL)) )
-            {
-                PICE_sprintf(tempCmd,"%-.3u: %.8X (%s)\n",i,sys_call_table[i],pName);
-            }
-            else
-            {
-                PICE_sprintf(tempCmd,"%-.3u: %.8X (%s)\n",i,sys_call_table[i],pName);
-            }
-            Print(OUTPUT_WINDOW,tempCmd);
-        }
-    }
-
-    LEAVE_FUNC();
-#endif
-       PICE_sprintf(tempCmd,"Not implemented yet!\n");
-       Print(OUTPUT_WINDOW,tempCmd);
-       return TRUE;
-}
-
-//*************************************************************************
-// SetAltKey()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(SetAltKey)
-{
-    if(pArgs->Count == 1)
-    {
-        ucBreakKey = (UCHAR)pArgs->Value[0];
-
-        PICE_sprintf(tempCmd,"new break key is CTRL-%c\n",ucBreakKey);
-        Print(OUTPUT_WINDOW,tempCmd);
-    }
-    else if(pArgs->Count == 0)
-    {
-        PICE_sprintf(tempCmd,"current break key is CTRL-%c\n",ucBreakKey);
-        Print(OUTPUT_WINDOW,tempCmd);
-    }
-
-
-    COMMAND_RET;
-}
-
-//*************************************************************************
-// ShowContext()
-//
-//*************************************************************************
-COMMAND_PROTOTYPE(ShowContext)
-{
-    COMMAND_RET;
-}
-
-//*************************************************************************
-//
-// utility functions for parsing
-//
-//*************************************************************************
-
-
-//*************************************************************************
-// FindCommand()
-//
-//*************************************************************************
-LPSTR FindCommand(LPSTR p)
-{
-    ULONG i,j,k=0;
-    LPSTR result=NULL;
-
-       tempCmd[0]=0;
-       for(j=0,i=0;CmdTable[i].Cmd!=NULL;i++)
-       {
-               if(PICE_strncmpi(CmdTable[i].Cmd,p,PICE_strlen(p)) == 0 &&
-           CmdTable[i].CommandGroup != COMMAND_GROUP_HELP_ONLY)
-               {
-                       if(PICE_strlen(tempCmd))
-                               PICE_strcat(tempCmd,", ");
-                       PICE_strcat(tempCmd,CmdTable[i].Cmd);
-                       j++;
-                       k=i;
-               }
-       }
-       if(PICE_strlen(tempCmd))
-       {
-               SetBackgroundColor(COLOR_CAPTION);
-               SetForegroundColor(COLOR_TEXT);
-               ClrLine(wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].cy);
-               PutChar(tempCmd,1,wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].cy);
-               if(j==1)
-               {
-                       PICE_sprintf(tempCmd,"%s",CmdTable[k].Help);
-                       PutChar(tempCmd,40,wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].cy);
-                       result=CmdTable[k].Cmd;
-               }
-        ResetColor();
-       }
-       return result;
-}
-
-
-//*************************************************************************
-// CompactString()
-//
-//*************************************************************************
-void CompactString(LPSTR p)
-{
-ULONG i;
-
-       for(i=1;i<PICE_strlen(p);i++)
-       {
-               if(p[i]==' ' && p[i-1]==' ')
-               {
-                       PICE_strcpy(&p[i-1],&p[i]);
-                       i=1;
-               }
-       }
-}
-
-//*************************************************************************
-// PICE_strtok()
-//
-//*************************************************************************
-char* PICE_strtok(char *szInputString)
-{
-static char* szCurrString;
-char *szTempString;
-ULONG currlength;
-ULONG i;
-
-       if(szInputString)
-       {
-               szCurrString=szInputString;
-               CompactString(szCurrString);
-       }
-
-       currlength=PICE_strlen(szCurrString);
-       if(!currlength)
-       {
-               szCurrString=0;
-               return NULL;
-       }
-       for(i=0;i<currlength;i++)
-       {
-               if(szCurrString[i]==' ')
-               {
-                       szCurrString[i]=0;
-                       break;
-               }
-       }
-       szTempString=szCurrString;
-       szCurrString=szCurrString+i+1;
-       return szTempString;
-}
-
-//*************************************************************************
-// ConvertTokenToHex()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToHex(LPSTR p,PULONG pValue)
-{
-ULONG result=0,i;
-
-       gCurrentSelector=0;
-       gCurrentOffset=0;
-       for(i=0;i<8 && p[i]!=0 && p[i]!=' ' && p[i]!=':';i++)
-       {
-               if(p[i]>='0' && p[i]<='9')
-               {
-                       result<<=4;
-                       result|=(ULONG)(UCHAR)(p[i]-'0');
-               }
-               else if(p[i]>='A' && p[i]<='F')
-               {
-                       result<<=4;
-                       result|=(ULONG)(UCHAR)(p[i]-'A'+10);
-               }
-               else if(p[i]>='a' && p[i]<='f')
-               {
-                       result<<=4;
-                       result|=(ULONG)(UCHAR)(p[i]-'a'+10);
-               }
-               else
-                       return FALSE;
-       }
-       p+=(i+1);
-       if(p[i]==':')
-       {
-               ULONG ulSelector=result;
-               if(ulSelector>0xFFFF)
-                       return FALSE;
-               for(i=0;i<8 && p[i]!=0 && p[i]!=' ' && p[i]!=':';i++)
-               {
-                       if(p[i]>='0' && p[i]<='9')
-                       {
-                               result<<=4;
-                               result|=(ULONG)(UCHAR)(p[i]-'0');
-                       }
-                       else if(p[i]>='A' && p[i]<='F')
-                       {
-                               result<<=4;
-                               result|=(ULONG)(UCHAR)(p[i]-'A'+10);
-                       }
-                       else if(p[i]>='a' && p[i]<='f')
-                       {
-                               result<<=4;
-                               result|=(ULONG)(UCHAR)(p[i]-'a'+10);
-                       }
-                       else
-                               return FALSE;
-               }
-               gCurrentSelector=(USHORT)ulSelector;
-               gCurrentOffset=result;
-               result = GetLinearAddress((USHORT)ulSelector,result);
-       }
-       *pValue=result;
-       return TRUE;
-}
-
-//*************************************************************************
-// ConvertTokenToDec()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToDec(LPSTR p,PULONG pValue)
-{
-    ULONG result=0;
-    char c;
-
-       while((c = *p))
-       {
-               if(c >= '0' && c <= '9')
-               {
-                       result *= 10;
-                       result += (ULONG)(c - '0');
-               }
-               else
-                       return FALSE;
-
-        p++;
-       }
-    *pValue = result;
-    return TRUE;
-}
-
-//*************************************************************************
-// ConvertTokenToSymbol()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToSymbol(LPSTR pToken,PULONG pValue)
-{
-    LPSTR pEx;
-    char temp[64];
-    LPSTR p;
-       PDEBUG_MODULE pModFound;
-
-    DPRINT((0,"ConvertTokenToSymbol()\n"));
-
-    PICE_strcpy(temp,pToken);
-    p = temp;
-
-    // test for module!symbol string
-    pEx = PICE_strchr(p,'!');
-    if(pEx)
-    {
-        DPRINT((0,"ConvertTokenToSymbol(): module!symbol syntax detected\n"));
-        // terminate module name
-        *pEx = 0;
-        // now we have two pointers
-        pEx++;
-        DPRINT((0,"ConvertTokenToSymbol(): module = %s symbol = %s\n",p,pEx));
-
-               if( pModFound=IsModuleLoaded(p) )
-        {
-            if((*pValue = FindFunctionInModuleByName(pEx,pModFound)))
-                return TRUE;
-        }
-    }
-    else
-    {
-        if(pCurrentMod)
-        {
-            if((*pValue = FindFunctionInModuleByName(p,pCurrentMod)))
-                return TRUE;
-        }
-       return ScanExports(p,pValue);
-    }
-    return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToModuleAndName()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToModuleAndName(LPSTR pToken,PULONG pulModuleName,PULONG pulFunctionName)
-{
-    LPSTR pEx;
-    char temp[64];
-    LPSTR p;
-    static char module_name[128];
-    static char function_name[128];
-
-    // test for module!symbol string
-    PICE_strcpy(temp,pToken);
-    p = temp;
-
-    DPRINT((0,"ConvertTokenToModuleAndName(%s)\n",p));
-
-    pEx = PICE_strchr(p,'!');
-    if(pEx)
-    {
-        DPRINT((0,"ConvertTokenToModuleAndName(): module!symbol syntax detected\n"));
-        // terminate module name
-        *pEx = 0;
-        // now we have two pointers
-        pEx++;
-        DPRINT((0,"ConvertTokenToModuleAndName(): module = %s symbol = %s\n",p,pEx));
-        PICE_strcpy(module_name,p);
-        PICE_strcpy(function_name,pEx);
-        *pulModuleName = (ULONG)module_name;
-        *pulFunctionName = (ULONG)function_name;
-        return TRUE;
-
-    }
-    return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToModule()
-//
-// convert an argument module name to a pointer to the module's symbols
-//*************************************************************************
-BOOLEAN ConvertTokenToModule(LPSTR p,PULONG pValue)
-{
-    ULONG i;
-       char temp[DEBUG_MODULE_NAME_LEN];
-
-    for(i=0;i<DIM(apSymbols);i++)
-    {
-        if(apSymbols[i])
-        {
-                       CopyWideToAnsi(temp,apSymbols[i]->name);
-            if(PICE_strcmpi(p,temp)==0)
-            {
-                *pValue = (ULONG)apSymbols[i];
-                return TRUE;
-            }
-        }
-    }
-
-    for(i=0;i<DIM(apSymbols);i++)
-    {
-        if(apSymbols[i])
-        {
-                       CopyWideToAnsi(temp,apSymbols[i]->name);
-            if(PICE_strncmpi(temp,p,PICE_strlen(p))==0)
-            {
-                *pValue = (ULONG)apSymbols[i];
-                return TRUE;
-            }
-        }
-    }
-
-       return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToProcess()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToProcess(LPSTR p,PULONG pValue)
-{
-       return FALSE;
-}
-
-//*************************************************************************
-// ReplaceKeywordWithValue()
-//
-//*************************************************************************
-BOOLEAN ReplaceKeywordWithValue(LPSTR p,PULONG pValue,KEYWORDS* pKeyWords)
-{
-    ULONG i;
-
-       for(i=0;pKeyWords[i].KeyWord!=NULL;i++)
-       {
-               if(PICE_strcmpi(p,pKeyWords[i].KeyWord)==0)
-               {
-                       switch(pKeyWords[i].ulSize)
-                       {
-                               case sizeof(USHORT):
-                                       *pValue=(ULONG)*(PUSHORT)(pKeyWords[i].pValue);
-                                       break;
-                               case sizeof(ULONG):
-                                       *pValue=*(PULONG)(pKeyWords[i].pValue);
-                                       break;
-                       }
-                       return TRUE;
-               }
-       }
-       return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToKeyword()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToKeyword(LPSTR p,PULONG pValue)
-{
-    char Name[256];
-    ULONG count;
-
-       DPRINT((0,"ConvertTokenToKeyword()\n"));
-       count=StrLenUpToWhiteChar(p," ");
-       PICE_strncpy(Name,p,count);
-       Name[count]=0;
-       if(ReplaceKeywordWithValue(Name,pValue,RegKeyWords))
-       {
-               DPRINT((0,"ConvertTokenToKeyword(): success\n"));
-               return TRUE;
-       }
-       return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToSpecialKeyword()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToSpecialKeyword(LPSTR p,PULONG pValue)
-{
-    char Name[256];
-    ULONG count;
-
-       count=StrLenUpToWhiteChar(p," ");
-       PICE_strncpy(Name,p,count);
-       Name[count]=0;
-       if(ReplaceKeywordWithValue(Name,pValue,SpecialKeyWords))
-       {
-               return TRUE;
-       }
-       return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToOnOff()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToOnOff(LPSTR p,PULONG pValue)
-{
-    char Name[256];
-    ULONG count;
-
-       count=StrLenUpToWhiteChar(p," ");
-       PICE_strncpy(Name,p,count);
-       Name[count]=0;
-       if(ReplaceKeywordWithValue(Name,pValue,OnOffKeyWords))
-       {
-               return TRUE;
-       }
-       return FALSE;
-}
-
-//*************************************************************************
-// ConvertSizeToKeyword()
-//
-//*************************************************************************
-BOOLEAN ConvertSizeToKeyword(LPSTR p,PULONG pValue)
-{
-    ULONG count;
-
-       count=StrLenUpToWhiteChar(p," ");
-    if(count > 1)
-           return FALSE;
-
-    switch(*p)
-    {
-        // BYTE
-        case 'b':
-        case 'B':
-            *pValue = 1;
-            break;
-        // WORD
-        case 'w':
-        case 'W':
-            *pValue = 2;
-            break;
-        // DWORD
-        case 'd':
-        case 'D':
-            *pValue = 4;
-            break;
-        // QWORD
-        case 'q':
-        case 'Q':
-            *pValue = 4;
-            break;
-        default:
-            return FALSE;
-    }
-
-    return TRUE;
-}
-
-
-//*************************************************************************
-// ConvertTokenToSrcFile()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToSrcFile(LPSTR p,PULONG pValue)
-{
-    PICE_SYMBOLFILE_SOURCE* pSrc;
-    LPSTR pFilename,pFilenameSrc;
-    ULONG i;
-
-    DPRINT((0,"ConvertTokenToSrcFile(%s)\n",p));
-
-    if(pCurrentSymbols && pCurrentSymbols->ulNumberOfSrcFiles)
-    {
-        DPRINT((0,"ConvertTokenToSrcFile(): current symbols for %S\n",pCurrentSymbols->name));
-
-        pSrc = (PICE_SYMBOLFILE_SOURCE*)((ULONG)pCurrentSymbols + pCurrentSymbols->ulOffsetToSrcFiles);
-
-        for(i=0;i<pCurrentSymbols->ulNumberOfSrcFiles;i++)
-        {
-            pFilename = strrchr(pSrc->filename,'/');
-            if(!pFilename)
-                pFilename = pSrc->filename;
-            else
-                pFilename++;
-
-            pFilenameSrc = strrchr(p,'/');
-            if(!pFilenameSrc )
-                pFilenameSrc = p;
-            else
-                pFilenameSrc++;
-
-            DPRINT((0,"ConvertTokenToSrcFile(): %s\n",pFilename));
-
-            if(PICE_strcmpi(pFilename,pFilenameSrc) == 0)
-            {
-                DPRINT((0,"ConvertTokenToSrcFile(): found %s\n",pFilename));
-
-                *pValue = (ULONG)pSrc;
-                return TRUE;
-            }
-
-            // go to next file
-            (LPSTR)pSrc += pSrc->ulOffsetToNext;
-        }
-
-        pSrc = (PICE_SYMBOLFILE_SOURCE*)((ULONG)pCurrentSymbols + pCurrentSymbols->ulOffsetToSrcFiles);
-
-        // if not found now do a lookup for partials
-        for(i=0;i<pCurrentSymbols->ulNumberOfSrcFiles;i++)
-        {
-            pFilename = strrchr(pSrc->filename,'/');
-            if(!pFilename)
-                pFilename = pSrc->filename;
-            else
-                pFilename++;
-
-            DPRINT((0,"ConvertTokenToSrcFile(): %s\n",pFilename));
-
-            if(PICE_strncmpi(pFilename,p,PICE_strlen(p)) == 0)
-            {
-                DPRINT((0,"ConvertTokenToSrcFile(): found %s\n",pFilename));
-
-                *pValue = (ULONG)pSrc;
-                return TRUE;
-            }
-
-            // go to next file
-            (LPSTR)pSrc += pSrc->ulOffsetToNext;
-        }
-
-    }
-    return FALSE;
-}
-
-//*************************************************************************
-// ConvertTokenToLineNumber()
-//
-//*************************************************************************
-BOOLEAN ConvertTokenToLineNumber(LPSTR p,PULONG pValue)
-{
-    ULONG ulDecimal;
-
-    DPRINT((0,"ConvertTokenToLineNumber()\n"));
-    if(*p++ == '.')
-    {
-        ulDecimal = ExtractNumber(p);
-        DPRINT((0,"ConvertTokenToLineNumber(): ulDecimal = %u\n",ulDecimal));
-        if(ulDecimal)
-        {
-            DPRINT((0,"ConvertTokenToLineNumber(): current file  = %s\n",szCurrentFile));
-            if(pCurrentMod && PICE_strlen(szCurrentFile))
-            {
-                DPRINT((0,"ConvertTokenToLineNumber(): current file  %S\n",pCurrentMod->name));
-                if(FindAddressForSourceLine(ulDecimal,szCurrentFile,pCurrentMod,pValue))
-                {
-                    DPRINT((0,"ConvertTokenToLineNumber(): value  = %x\n",*pValue));
-                    return TRUE;
-                }
-            }
-        }
-    }
-
-    return FALSE;
-}
-
-
-//*************************************************************************
-// IsWhiteChar()
-//
-//*************************************************************************
-BOOLEAN IsWhiteChar(char c,LPSTR WhiteChars)
-{
-       USHORT lenWhiteChar = PICE_strlen(WhiteChars);
-       USHORT i;
-       for(i=0;i<lenWhiteChar;i++)
-       {
-               if(c == WhiteChars[i])
-                       return TRUE;
-       }
-       return FALSE;
-}
-
-//*************************************************************************
-// StrLenUpToWhiteChar()
-//
-//*************************************************************************
-ULONG StrLenUpToWhiteChar(LPSTR p,LPSTR WhiteChars)
-{
-    ULONG i;
-
-       for(i=0;p[i]!=0 && !IsWhiteChar(p[i],WhiteChars);i++);
-
-       return i;
-}
-
-//
-// command line parser
-//
-void Parse(LPSTR pCmdLine,BOOLEAN bInvokedByFkey)
-{
-    ULONG i,j;
-    BOOLEAN result=FALSE;
-    char *pToken;
-    ARGS Arguments;
-    CMDTABLE *pCurrentCommand=NULL;
-
-    ulCountForWaitKey = 0;
-
-    if(!bInvokedByFkey)
-    {
-        ClrLine(wWindow[OUTPUT_WINDOW].y+wWindow[OUTPUT_WINDOW].usCurY);
-    }
-
-    PICE_memset(&Arguments,0,sizeof(ARGS));
-
-       for(j=0,i=0;CmdTable[i].Cmd!=NULL;i++)
-       {
-               if(PICE_strncmpi(CmdTable[i].Cmd,pCmdLine,PICE_strlen(CmdTable[i].Cmd))==0 &&
-                  PICE_strlen(CmdTable[i].Cmd)==StrLenUpToWhiteChar(pCmdLine," ") &&
-           CmdTable[i].CommandGroup != COMMAND_GROUP_HELP_ONLY)
-               {
-                       pCurrentCommand=&CmdTable[i];
-                       break;
-               }
-       }
-       if(pCurrentCommand==NULL)
-       {
-               Print(OUTPUT_WINDOW,"  <-- command not found\n");
-               Print(OUTPUT_WINDOW,":");
-               goto CommonParseReturnPoint;
-       }
-
-       pToken = PICE_strtok( pCmdLine);
-       // get the args and convert them into numbers
-       i=0;
-    j=0;
-       do
-       {
-               pToken=PICE_strtok( NULL);
-               DPRINT((0,"pToken = %s\n",pToken));
-               if(pToken)
-               {
-            if(*pToken == '-' && PICE_strlen(pToken)==2)
-            {
-                       DPRINT((0,"might be a switch\n"));
-                           if(pCurrentCommand->Flags & COMMAND_HAS_SWITCHES)
-                {
-                    // token starts with '-' and is 2 chars long
-                    // must be a switch
-                    if(PICE_strchr(pCurrentCommand->pszRecognizedSwitches,*(pToken+1)) )
-                    {
-                               DPRINT((0,"is a switch!\n"));
-                        Arguments.Switch[j++]=*(pToken+1);
-                        continue;
-                    }
-                    // not a valid switch
-                    else
-                    {
-                                           PICE_sprintf(tempCmd,"  <-- %s is not a valid switch\n",pToken);
-                                           Print(OUTPUT_WINDOW,tempCmd);
-                               Print(OUTPUT_WINDOW,":");
-                        goto CommonParseReturnPoint;
-                    }
-                }
-                else
-                {
-                                       PICE_sprintf(tempCmd,"  <-- %s can't have any switches\n",pCurrentCommand->Cmd);
-                                       Print(OUTPUT_WINDOW,tempCmd);
-                       Print(OUTPUT_WINDOW,":");
-                    goto CommonParseReturnPoint;
-                }
-            }
-
-                       if(pCurrentCommand->Flags & COMMAND_HAS_PARAMS)
-                       {
-                               if(!pCurrentCommand->ParamFlags[i])
-                               {
-                                   PICE_sprintf(tempCmd,"  <-- %s can't have more than %u parameters\n",pCurrentCommand->Cmd,i);
-                                       Print(OUTPUT_WINDOW,tempCmd);
-                       Print(OUTPUT_WINDOW,":");
-                    goto CommonParseReturnPoint;
-                               }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_SRCLINE\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_SRCLINE)
-                {
-                                       if(ConvertTokenToLineNumber(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                    if(*pToken == '.')
-                    {
-                                       PICE_sprintf(tempCmd,"  <-- no line number %s found\n",pToken);
-                                           Print(OUTPUT_WINDOW,tempCmd);
-                               Print(OUTPUT_WINDOW,":");
-                        goto CommonParseReturnPoint;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_NUMERIC\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_NUMERIC)
-                {
-                               if(ConvertTokenToHex(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_DECIMAL\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_DECIMAL)
-                {
-                               if(ConvertTokenToDec(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_REG_KEYWORD\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_REG_KEYWORD)
-                {
-                                       if(ConvertTokenToKeyword(pToken,&Arguments.Value[i]))
-                    {
-                                               Arguments.pToken[i] = pToken;
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_SYMBOLIC\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_SYMBOLIC)
-                {
-                       if(ConvertTokenToSymbol(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_VIRTUAL_SYMBOLIC\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_VIRTUAL_SYMBOLIC)
-                {
-                    DPRINT((0,"might be a virtual modname!symbol syntax!\n"));
-                       if(ConvertTokenToModuleAndName(pToken,&Arguments.Value[i],&Arguments.Value[i+1]))
-                    {
-                        Arguments.bNotTranslated[i]=TRUE;
-                        Arguments.bNotTranslated[i+1]=TRUE;
-                        i+=2;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_MODULE\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_MODULE)
-                {
-                    if(ConvertTokenToModule(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_PRNAME\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_PRNAME)
-                {
-                    if(ConvertTokenToProcess(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_SRC_FILE\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_SRC_FILE)
-                {
-                    if(ConvertTokenToSrcFile(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_ASTERISK\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_ASTERISK)
-                {
-                    if(PICE_strlen(pToken)==1 && pToken[0]=='*')
-                    {
-                        Arguments.Value[i]=-1;
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_LETTER\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_LETTER)
-                {
-                    if(PICE_strlen(pToken)==1 && PICE_isprint(pToken[0]))
-                    {
-                        Arguments.Value[i]=(ULONG)pToken[0];
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_ONOFF\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_ONOFF)
-                {
-                                       if(ConvertTokenToOnOff(pToken,&Arguments.Value[i]))
-                    {
-                        i++;
-                        continue;
-                    }
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_PARTIAL_SYM_NAME\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_PARTIAL_SYM_NAME)
-                {
-                                       Arguments.Value[i] = (ULONG)pToken;
-                    i++;
-                    continue;
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_ANY_STRING\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_ANY_STRING)
-                {
-                                       Arguments.Value[i] = (ULONG)pToken;
-                    i++;
-                    continue;
-                }
-                DPRINT((0,"Parse(): PARAM_CAN_BE_SIZE_DESC\n"));
-                if(pCurrentCommand->ParamFlags[i] & PARAM_CAN_BE_SIZE_DESC)
-                {
-                                       if(ConvertSizeToKeyword(pToken,&Arguments.Value[i]))
-                    {
-                                               Arguments.pToken[i] = pToken;
-                        i++;
-                        continue;
-                    }
-                }
-                PICE_sprintf(tempCmd,"  <-- syntax error in parameter %u!\n",i);
-                               Print(OUTPUT_WINDOW,tempCmd);
-                       Print(OUTPUT_WINDOW,":");
-                               goto CommonParseReturnPoint;
-                       }
-            else
-            {
-                PICE_sprintf(tempCmd,"  <-- %s has no parameters\n",pCurrentCommand->Cmd);
-                       Print(OUTPUT_WINDOW,tempCmd);
-                       Print(OUTPUT_WINDOW,":");
-                goto CommonParseReturnPoint;
-            }
-                   // next token
-                   i++;
-        }
-       }while(pToken && i<MAX_ARGS);
-
-       Arguments.Count=i;
-       Arguments.CountSwitches=j;
-
-       if(pCurrentCommand)
-       {
-        DPRINT((0,"Parse(): command %s switches %u\n",pCurrentCommand->Cmd,Arguments.CountSwitches));
-
-        if(!bInvokedByFkey)
-        {
-            DPRINT((0,"Parse(): adding new line\n"));
-                       Print(OUTPUT_WINDOW,"\n");
-        }
-
-        // call the command handler
-               result=pCurrentCommand->Handler(&Arguments);
-
-               if(result && !bInvokedByFkey && pCurrentCommand->Handler!=LeaveIce && pCurrentCommand->Handler!=SingleStep )
-        {
-            DPRINT((0,"Parse(): adding colon\n"));
-                       Print(OUTPUT_WINDOW,":");
-        }
-       }
-
-CommonParseReturnPoint:
-    SuspendPrintRingBuffer(FALSE);
-       PrintRingBuffer(wWindow[OUTPUT_WINDOW].cy-1);
-
-    ShowStatusLine();
-}