📄 shell.c
字号:
UnassembleOneLineUp();
}
}
// command line history
else if(!bShift && !bControl && !bAlt)
{
LPSTR pCurrentCmd;
ULONG len;
DPRINT((0,"DebuggerShell(): command line up\n"));
// only if anything in history
if(GetLinesInCommandHistory())
{
// go to next entry in history
if(ulCommandCurrentPos)
ulCommandCurrentPos = (ulCommandCurrentPos-1)%GetLinesInCommandHistory();
else
ulCommandCurrentPos = GetLinesInCommandHistory()-1;
DPRINT((0,"DebuggerShell(): current history pos = %u\n",ulCommandCurrentPos));
// get this entry
pCurrentCmd = GetFromCommandLineHistory(ulCommandCurrentPos);
// if it has a string attached
if((len = PICE_strlen(pCurrentCmd)))
{
// replace the current command line
PICE_sprintf(tempShell,":");
ReplaceRingBufferCurrent(tempShell);
PICE_memset(&ucCommandBuffer,0,sizeof(ucCommandBuffer));
PICE_strcpy(ucCommandBuffer,pCurrentCmd);
usCurrentPosInInputBuffer=len;
Print(OUTPUT_WINDOW,pCurrentCmd);
}
}
}
break;
case SCANCODE_DOWN: // down
DPRINT((0,"DebuggerShell(): DOWN\n"));
// memory window
if(bAlt)
{
DPRINT((0,"DebuggerShell(): data window down\n"));
OldOffset+=0x10;
// display data window
Args.Value[0]=OldSelector;
Args.Value[1]=OldOffset;
Args.Count=2;
DisplayMemory(&Args);
}
// output window
else if(bShift)
{
DPRINT((0,"DebuggerShell(): output window down ulLastLineDisplayedOffset = %u\n",ulLastLineDisplayedOffset));
if(ulLastLineDisplayedOffset)
{
ulLastLineDisplayedOffset -= 1;
if(!PrintRingBufferOffset(wWindow[OUTPUT_WINDOW].cy-1,ulLastLineDisplayedOffset))
{
ulLastLineDisplayedOffset = 0;
PrintRingBuffer(wWindow[OUTPUT_WINDOW].cy-1);
}
}
}
// source window down
else if(bControl)
{
if(ulCurrentlyDisplayedLineNumber>0 && PICE_strlen(szCurrentFile))
{
PICE_SYMBOLFILE_SOURCE* pSrc;
if(ConvertTokenToSrcFile(szCurrentFile,(PULONG)&pSrc) )
{
ulCurrentlyDisplayedLineNumber++;
DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
(LPSTR)pSrc+pSrc->ulOffsetToNext,
ulCurrentlyDisplayedLineNumber,-1);
}
}
else
{
UnassembleOneLineDown();
}
}
// command line history
else if(!bShift && !bControl && !bAlt)
{
LPSTR pCurrentCmd;
ULONG len;
DPRINT((0,"DebuggerShell(): command line down\n"));
// only if anything in history
if(GetLinesInCommandHistory())
{
// go to next entry in history
ulCommandCurrentPos = (ulCommandCurrentPos+1)%(GetLinesInCommandHistory());
DPRINT((0,"DebuggerShell(): current history pos = %u\n",ulCommandCurrentPos));
// get this entry
pCurrentCmd = GetFromCommandLineHistory(ulCommandCurrentPos);
// if it has a string attached
if((len = PICE_strlen(pCurrentCmd)))
{
// replace the current command line
PICE_sprintf(tempShell,":");
ReplaceRingBufferCurrent(tempShell);
PICE_memset(&ucCommandBuffer,0,sizeof(ucCommandBuffer));
PICE_strcpy(ucCommandBuffer,pCurrentCmd);
usCurrentPosInInputBuffer=len;
Print(OUTPUT_WINDOW,pCurrentCmd);
}
}
}
break;
case SCANCODE_LEFT: // left
DPRINT((0,"DebuggerShell(): LEFT\n"));
// memory window
if(bAlt)
{
DPRINT((0,"DebuggerShell(): data window left\n"));
OldOffset-=0x1;
// display data window
Args.Value[0]=OldSelector;
Args.Value[1]=OldOffset;
Args.Count=2;
DisplayMemory(&Args);
}
else if(!bShift && !bControl && !bAlt)
{
}
else if(bControl)
{
if(ulWindowOffset > 0)
ulWindowOffset--;
PICE_memset(&Args,0,sizeof(ARGS));
Args.Count=0;
Unassemble(&Args);
}
break;
case SCANCODE_RIGHT: // right
// memory window
if(bAlt)
{
DPRINT((0,"DebuggerShell(): data window right\n"));
OldOffset+=0x1;
// display data window
Args.Value[0]=OldSelector;
Args.Value[1]=OldOffset;
Args.Count=2;
DisplayMemory(&Args);
}
else if(!bShift && !bControl && !bAlt)
{
}
else if(bControl)
{
if(ulWindowOffset < 80)
ulWindowOffset++;
PICE_memset(&Args,0,sizeof(ARGS));
Args.Count=0;
Unassemble(&Args);
}
break;
case SCANCODE_PGUP: // page up
DPRINT((0,"DebuggerShell(): PAGEUP\n"));
// memory window
if(bAlt)
{
OldOffset-=wWindow[DATA_WINDOW].cy*0x10;
// display data window
Args.Value[0]=OldSelector;
Args.Value[1]=OldOffset;
Args.Count=2;
DisplayMemory(&Args);
}
// output window
else if(bShift)
{
if(ulLastLineDisplayedOffset+2*(wWindow[OUTPUT_WINDOW].cy) < LinesInRingBuffer())
{
ulLastLineDisplayedOffset += (wWindow[OUTPUT_WINDOW].cy);
PrintRingBufferOffset(wWindow[OUTPUT_WINDOW].cy-1,ulLastLineDisplayedOffset);
}
else
{
if(ulLastLineDisplayedOffset != LinesInRingBuffer()-wWindow[OUTPUT_WINDOW].cy)
{
ulLastLineDisplayedOffset = LinesInRingBuffer()-wWindow[OUTPUT_WINDOW].cy;
PrintRingBufferOffset(wWindow[OUTPUT_WINDOW].cy-1,ulLastLineDisplayedOffset);
}
}
}
// source window page up
else if(bControl)
{
if(PICE_strlen(szCurrentFile))
{
if((ulCurrentlyDisplayedLineNumber-wWindow[SOURCE_WINDOW].cy)>0)
{
PICE_SYMBOLFILE_SOURCE* pSrc;
if(ConvertTokenToSrcFile(szCurrentFile,(PULONG)&pSrc) )
{
ulCurrentlyDisplayedLineNumber -= wWindow[SOURCE_WINDOW].cy;
DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
(LPSTR)pSrc+pSrc->ulOffsetToNext,
ulCurrentlyDisplayedLineNumber ,-1);
}
}
else
{
PICE_SYMBOLFILE_SOURCE* pSrc;
if(ConvertTokenToSrcFile(szCurrentFile,(PULONG)&pSrc) )
{
ulCurrentlyDisplayedLineNumber = 1;
DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
(LPSTR)pSrc+pSrc->ulOffsetToNext,
ulCurrentlyDisplayedLineNumber ,-1);
}
}
}
else
{
UnassembleOnePageUp(wWindow[SOURCE_WINDOW].cy);
}
}
else if(!bShift && !bControl && !bAlt)
{
}
break;
case SCANCODE_PGDN: // page down
DPRINT((0,"DebuggerShell(): PAGEDOWN\n"));
// memory window
if(bAlt)
{
OldOffset+=wWindow[DATA_WINDOW].cy*0x10;
// display data window
Args.Value[0]=OldSelector;
Args.Value[1]=OldOffset;
Args.Count=2;
DisplayMemory(&Args);
}
else if(bShift)
{
if(ulLastLineDisplayedOffset>wWindow[OUTPUT_WINDOW].cy)
{
ulLastLineDisplayedOffset -= (wWindow[OUTPUT_WINDOW].cy);
PrintRingBufferOffset(wWindow[OUTPUT_WINDOW].cy-1,ulLastLineDisplayedOffset);
}
else
{
if(ulLastLineDisplayedOffset)
{
ulLastLineDisplayedOffset = 0;
PrintRingBufferOffset(wWindow[OUTPUT_WINDOW].cy-1,ulLastLineDisplayedOffset);
}
}
}
else if(bControl)
{
if(PICE_strlen(szCurrentFile) )
{
if((ulCurrentlyDisplayedLineNumber+wWindow[SOURCE_WINDOW].cy)>0)
{
PICE_SYMBOLFILE_SOURCE* pSrc;
if(ConvertTokenToSrcFile(szCurrentFile,(PULONG)&pSrc) )
{
ulCurrentlyDisplayedLineNumber += wWindow[SOURCE_WINDOW].cy;
DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
(LPSTR)pSrc+pSrc->ulOffsetToNext,
ulCurrentlyDisplayedLineNumber ,-1);
}
}
else
{
PICE_SYMBOLFILE_SOURCE* pSrc;
if(ConvertTokenToSrcFile(szCurrentFile,(PULONG)&pSrc) )
{
ulCurrentlyDisplayedLineNumber = 1;
DisplaySourceFile((LPSTR)pSrc+sizeof(PICE_SYMBOLFILE_SOURCE),
(LPSTR)pSrc+pSrc->ulOffsetToNext,
ulCurrentlyDisplayedLineNumber ,-1);
}
}
}
else
{
UnassembleOnePageDown(wWindow[SOURCE_WINDOW].cy);
}
}
else if(!bShift && !bControl && !bAlt)
{
}
break;
}
}
}
}
ucKeyPressedWhileIdle=0;
}
}
SaveOldRegs();
PrintLogo(TRUE);
ShowRunningMsg();
if(bRev)
PrintCursor(TRUE);
// hide the cursor
HideCursor();
FlushKeyboardQueue();
RestoreGraphicsState();
LEAVE_FUNC();
}
//*************************************************************************
// RealIsr()
//
//*************************************************************************
void RealIsr(ULONG dwReasonForBreak)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -