X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fdbg%2Fdbg.c;h=c2ddb194bf3f235da67394817a1093ee65ca61ea;hb=1ab221bd059772a770ef198009d44d80a104ccce;hp=a76f3e135f2b25fe24024d92cd63e886b8dda301;hpb=d29be293fed631b766f844ce0c173f51549f1909;p=cc65 diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index a76f3e135..c2ddb194b 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -44,8 +44,10 @@ static char GetKeyUpdate (void); /* Data */ /*****************************************************************************/ + + /* Color definitions */ -#ifdef __PLUS4__ +#if defined(__PLUS4__) || defined(__C16__) # define COLOR_BORDER (BCOLOR_DARKBLUE | CATTR_LUMA6) # define COLOR_BACKGROUND COLOR_WHITE # define COLOR_TEXTHIGH COLOR_BLACK @@ -53,7 +55,7 @@ static char GetKeyUpdate (void); # define COLOR_FRAMEHIGH COLOR_BLACK # define COLOR_FRAMELOW COLOR_GRAY2 #else -# ifdef COLOR_GRAY3 +# if defined(COLOR_GRAY3) # define COLOR_BORDER COLOR_BLACK # define COLOR_BACKGROUND COLOR_BLACK # define COLOR_TEXTHIGH COLOR_WHITE @@ -61,7 +63,7 @@ static char GetKeyUpdate (void); # define COLOR_FRAMEHIGH COLOR_WHITE # define COLOR_FRAMELOW COLOR_GRAY3 # else -# ifdef __APPLE2__ +# if defined(__APPLE2__) || defined(__APPLE2ENH__) # define COLOR_BORDER COLOR_BLACK # define COLOR_BACKGROUND COLOR_BLACK # define COLOR_TEXTHIGH COLOR_BLACK @@ -85,7 +87,7 @@ static char GetKeyUpdate (void); # define MAX_X 80 # define MAX_Y 25 # define DUMP_BYTES 16 -#elif defined(__APPLE2__) || defined(__ATARI__) +#elif defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__ATARI__) # define MAX_X 40 # define MAX_Y 24 # define DUMP_BYTES 8 @@ -95,7 +97,10 @@ static char GetKeyUpdate (void); # define DUMP_BYTES 8 #endif - +/* Replacement key definitions */ +#if defined(__APPLE2__) +# define CH_DEL ('H' - 'A' + 1) /* Ctrl+H */ +#endif /* Defines for opcodes */ #define OPC_BRK 0x00 @@ -158,23 +163,24 @@ static TextDesc RegText [] = { { 1, 7, "HI" } }; static TextDesc HelpText [] = { - { 1, 0, "F1, ? Help" }, - { 1, 1, "F2, t Toggle breakpoint" }, - { 1, 2, "F3, u Run until subroutine returns" }, - { 1, 3, "F4, h Run to cursor" }, - { 1, 4, "F7, space Step into" }, - { 1, 5, "F8, enter Step over" }, - { 1, 6, "1-5 Select active window" }, - { 1, 7, "+ Page down" }, - { 1, 8, "- Page up" }, - { 1, 9, "Cursor Move up/down" }, - { 1, 10, "c Continue" }, - { 1, 11, "f Follow instruction" }, - { 1, 12, "o Goto origin" }, - { 1, 13, "p Use as new PC value" }, - { 1, 14, "q Quit" }, - { 1, 15, "r Redraw screen" }, - { 1, 16, "s Skip next instruction" }, + { 1, 0, "F1, ? Help" }, + { 1, 1, "F2, t Toggle breakpoint" }, + { 1, 2, "F3, u Run until subroutine returns" }, + { 1, 3, "F4, h Run to cursor" }, + { 1, 4, "F7, space Step into" }, + { 1, 5, "F8, enter Step over" }, + { 1, 6, "1-5 Select active window" }, + { 1, 7, "+ Page down" }, + { 1, 8, "- Page up" }, + { 1, 9, "Cursor Move up/down" }, + { 1, 10, "a/z Move up/down" }, + { 1, 11, "c Continue" }, + { 1, 12, "f Follow instruction" }, + { 1, 13, "o Goto origin" }, + { 1, 14, "p Use as new PC value" }, + { 1, 15, "q Quit" }, + { 1, 16, "r Redraw screen" }, + { 1, 17, "s Skip next instruction" }, }; @@ -305,7 +311,7 @@ BreakPoint* DbgIsBreak (unsigned Addr); -static void DrawFrame (FrameDesc* F, char Active) +static void DrawFrame (register FrameDesc* F, char Active) /* Draw one window frame */ { TextDesc* T; @@ -351,7 +357,7 @@ static void DrawFrame (FrameDesc* F, char Active) cvlinexy (F->fd_x2, y1, F->fd_height); /* If the window has static text associated, print the text */ - textcolor (COLOR_TEXTLOW); + (void) textcolor (COLOR_TEXTLOW); Count = F->fd_textcount; T = F->fd_text; while (Count--) { @@ -360,7 +366,7 @@ static void DrawFrame (FrameDesc* F, char Active) } /* Set the old color */ - textcolor (OldColor); + (void) textcolor (OldColor); } @@ -386,7 +392,7 @@ static void ActivateFrame (int Num, unsigned char Clear) /* Activate a new frame, deactivate the old one */ { unsigned char y; - FrameDesc* F; + register FrameDesc* F; if (ActiveFrame != Num) { @@ -400,9 +406,9 @@ static void ActivateFrame (int Num, unsigned char Clear) F = Frames [ActiveFrame]; /* Clear the frame if requested */ if (Clear) { - for (y = F->fd_y1+1; y < F->fd_y2; ++y) { - cclearxy (F->fd_x1+1, y, F->fd_width); - } + for (y = F->fd_y1+1; y < F->fd_y2; ++y) { + cclearxy (F->fd_x1+1, y, F->fd_width); + } } DrawFrame (F, 1); } @@ -416,7 +422,7 @@ static void ActivateFrame (int Num, unsigned char Clear) /*****************************************************************************/ -/* Prompt line */ +/* Prompt line */ /*****************************************************************************/ @@ -431,7 +437,7 @@ static void DisplayPrompt (char* s) /* Clear the old prompt if there is one */ if (ActivePrompt) { - textcolor (PromptColor); + (void) textcolor (PromptColor); chlinexy ((MAX_X - PromptLength) / 2, MAX_Y-1, PromptLength); } @@ -441,11 +447,11 @@ static void DisplayPrompt (char* s) PromptLength = strlen (ActivePrompt); /* Display the new prompt */ - textcolor (COLOR_TEXTHIGH); + (void) textcolor (COLOR_TEXTHIGH); cputsxy ((MAX_X - PromptLength) / 2, MAX_Y-1, ActivePrompt); /* Restore the old color */ - textcolor (PromptColor); + (void) textcolor (PromptColor); } @@ -465,6 +471,24 @@ static void AnyKeyPrompt (void) +static char IsAbortKey (char C) +/* Return true if C is an abort key */ +{ +#if defined(CH_ESC) + if (C == CH_ESC) { + return 1; + } +#endif +#if defined(CH_STOP) + if (C == CH_STOP) { + return 1; + } +#endif + return 0; +} + + + static char Input (char* Prompt, char* Buf, unsigned char Count) /* Read input from the user, return 1 on success, 0 if aborted */ { @@ -482,7 +506,7 @@ static char Input (char* Prompt, char* Buf, unsigned char Count) /* Display the new prompt */ OldColor = textcolor (COLOR_TEXTHIGH); cputsxy (0, MAX_Y-1, Prompt); - textcolor (COLOR_TEXTLOW); + (void) textcolor (COLOR_TEXTLOW); /* Remember where we are, enable the cursor */ x1 = wherex (); @@ -496,14 +520,14 @@ static char Input (char* Prompt, char* Buf, unsigned char Count) Buf [i] = c; cputcxy (x1 + i, MAX_Y-1, c); ++i; - } else if (i > 0 && c == CH_DEL) { + } else if (i > 0 && c == CH_DEL) { --i; cputcxy (x1 + i, MAX_Y-1, ' '); gotoxy (x1 + i, MAX_Y-1); } else if (c == '\n') { Buf [i] = '\0'; done = 1; - } else if (c == CH_ESC) { + } else if (IsAbortKey (c)) { /* Abort */ done = 2; } @@ -511,7 +535,7 @@ static char Input (char* Prompt, char* Buf, unsigned char Count) /* Reset settings, display old prompt line */ cursor (OldCursor); - textcolor (OldColor); + (void) textcolor (OldColor); DrawFrames (); Frame = ActiveFrame; ActiveFrame = -1; @@ -522,8 +546,8 @@ static char Input (char* Prompt, char* Buf, unsigned char Count) -static int InputHex (char* Prompt, unsigned* Val) -/* Prompt for a hexadecimal value */ +static char InputHex (char* Prompt, unsigned* Val) +/* Prompt for a hexadecimal value. Return 0 on failure. */ { char Buf [5]; char* P; @@ -563,14 +587,6 @@ static int InputHex (char* Prompt, unsigned* Val) -static int InputGoto (unsigned* Addr) -/* Prompt "Goto" and read an address */ -{ - return InputHex ("Goto: ", Addr); -} - - - static void ErrorPrompt (char* Msg) /* Display an error message and wait for a key */ { @@ -589,6 +605,19 @@ static void ErrorPrompt (char* Msg) +static char InputGoto (unsigned* Addr) +/* Prompt "Goto" and read an address. Print an error and return 0 on failure. */ +{ + char Ok; + Ok = InputHex ("Goto: ", Addr); + if (!Ok) { + ErrorPrompt ("Invalid input - press a key"); + } + return Ok; +} + + + static void BreakInRomError (void) /* Print an error message if we cannot set a breakpoint */ { @@ -616,7 +645,7 @@ static void DbgSetTmpBreak (unsigned Addr) static void DbgToggleUserBreak (unsigned Addr) /* Set a breakpoint */ { - BreakPoint* B = DbgIsBreak (Addr); + register BreakPoint* B = DbgIsBreak (Addr); if (B) { /* We have a breakpoint, remove it */ @@ -629,13 +658,13 @@ static void DbgToggleUserBreak (unsigned Addr) } else { /* Test if we can set a breakpoint at that address */ if (!DbgIsRAM (Addr)) { - BreakInRomError (); + BreakInRomError (); } else { - /* Set the breakpoint */ - B = DbgGetBreakSlot (); - B->bk_addr = Addr; - B->bk_use = BRK_USER; - ++DbgBreakCount; + /* Set the breakpoint */ + B = DbgGetBreakSlot (); + B->bk_addr = Addr; + B->bk_use = BRK_USER; + ++DbgBreakCount; } } } @@ -653,7 +682,7 @@ static void DbgResetTmpBreaks (void) if (B->bk_use == BRK_TMP) { B->bk_use = BRK_EMPTY; } - ++B; + ++B; } } @@ -668,11 +697,11 @@ static unsigned char DbgTmpBreaksOk (void) BreakPoint* B = DbgBreaks; for (i = 0; i < MAX_USERBREAKS; ++i) { if (B->bk_use == BRK_TMP && !DbgIsRAM (B->bk_addr)) { - BreakInRomError (); - DbgResetTmpBreaks (); - return 0; + BreakInRomError (); + DbgResetTmpBreaks (); + return 0; } - ++B; + ++B; } return 1; } @@ -680,7 +709,7 @@ static unsigned char DbgTmpBreaksOk (void) /*****************************************************************************/ -/* Assembler window stuff */ +/* Assembler window stuff */ /*****************************************************************************/ @@ -703,17 +732,17 @@ static unsigned AsmBack (unsigned mem, unsigned char lines) adr [in] = cur; in = (in + 1) & 0x1F; if (cur >= mem) { - if (cur == mem || offs == 12) { - /* Found */ - return adr [(in - lines - 1) & 0x1F]; - } else { - /* The requested address is inside an instruction, go back - * one more byte and try again. - */ + if (cur == mem || offs == 12) { + /* Found */ + return adr [(in - lines - 1) & 0x1F]; + } else { + /* The requested address is inside an instruction, go back + * one more byte and try again. + */ ++offs; - break; - } - } + break; + } + } } } } @@ -731,22 +760,22 @@ static unsigned UpdateAsm (void) unsigned m = AsmBack (AsmAddr, 2); for (y = AsmFrame.fd_y1+1; y < AsmFrame.fd_y2; ++y) { - len = DbgDisAsm (m, buf, width); + len = DbgDisAsm (m, buf, width); if (m == brk_pc) { - buf [4] = '-'; - buf [5] = '>'; - } - if (DbgIsBreak (m)) { - buf [5] = '*'; - } - if (m == AsmAddr) { - revers (1); - cputsxy (1, y, buf); - revers (0); - } else { - cputsxy (1, y, buf); - } - m += len; + buf [4] = '-'; + buf [5] = '>'; + } + if (DbgIsBreak (m)) { + buf [5] = '*'; + } + if (m == AsmAddr) { + revers (1); + cputsxy (1, y, buf); + revers (0); + } else { + cputsxy (1, y, buf); + } + m += len; } return m; } @@ -766,33 +795,33 @@ static void AsmFollow (void) { switch (*(unsigned char*) AsmAddr) { - case OPC_JMP: - case OPC_JSR: + case OPC_JMP: + case OPC_JSR: AsmAddr = AsmArg16 (); - break; + break; case OPC_JMPIND: - AsmAddr = *(unsigned*)AsmArg16 (); - break; - - case OPC_BPL: - case OPC_BMI: - case OPC_BVC: - case OPC_BVS: - case OPC_BCC: - case OPC_BCS: - case OPC_BNE: - case OPC_BEQ: + AsmAddr = *(unsigned*)AsmArg16 (); + break; + + case OPC_BPL: + case OPC_BMI: + case OPC_BVC: + case OPC_BVS: + case OPC_BCC: + case OPC_BCS: + case OPC_BNE: + case OPC_BEQ: AsmAddr = AsmAddr + 2 + *(signed char*)(AsmAddr+1); - break; + break; case OPC_RTS: - AsmAddr = (*(unsigned*) (DbgSP + 0x101) + 1); - break; + AsmAddr = (*(unsigned*) (DbgSP + 0x101) + 1); + break; case OPC_RTI: - AsmAddr = *(unsigned*) (DbgSP + 0x102); - break; + AsmAddr = *(unsigned*) (DbgSP + 0x102); + break; } } @@ -827,23 +856,23 @@ static char AsmHandler (void) /* Update the window contents */ Last = UpdateAsm (); - /* Read and handle input */ - switch (c = GetKeyUpdate ()) { + /* Read and handle input */ + switch (c = GetKeyUpdate ()) { - case '+': - AsmAddr = Last; - break; + case '+': + AsmAddr = Last; + break; - case '-': - AsmAddr = AsmBack (AsmAddr, AsmFrame.fd_height); - break; + case '-': + AsmAddr = AsmBack (AsmAddr, AsmFrame.fd_height); + break; - case 't': + case 't': #ifdef CH_F2 case CH_F2: #endif - DbgToggleUserBreak (AsmAddr); - break; + DbgToggleUserBreak (AsmAddr); + break; case 'f': AsmFollow (); @@ -861,11 +890,17 @@ static char AsmHandler (void) brk_pc = AsmAddr; break; + case 'a': +#ifdef CH_CURS_UP case CH_CURS_UP: +#endif AsmAddr = AsmBack (AsmAddr, 1); break; + case 'z': +#ifdef CH_CURS_DOWN case CH_CURS_DOWN: +#endif AsmAddr += DbgDisAsmLen (AsmAddr); break; @@ -924,7 +959,7 @@ static char RegHandler (void) /*****************************************************************************/ -/* Stack window stuff */ +/* Stack window stuff */ /*****************************************************************************/ @@ -938,10 +973,10 @@ static unsigned UpdateStack (void) unsigned char y; for (y = StackFrame.fd_y2-1; y > StackFrame.fd_y1; --y) { - gotoxy (x1, y); - cputhex8 (mem); - gotoxy (x2, y); - cputhex8 (* (unsigned char*) (mem + 0x100)); + gotoxy (x1, y); + cputhex8 (mem); + gotoxy (x2, y); + cputhex8 (* (unsigned char*) (mem + 0x100)); ++mem; } return mem; @@ -974,35 +1009,41 @@ static char StackHandler (void) while (1) { - /* Read and handle input */ - switch (c = GetKeyUpdate ()) { + /* Read and handle input */ + switch (c = GetKeyUpdate ()) { - case '+': + case '+': StackAddr += BytesPerPage; - break; + break; - case '-': - StackAddr -= BytesPerPage; - break; + case '-': + StackAddr -= BytesPerPage; + break; - case 'o': - StackHome (); - break; + case 'o': + StackHome (); + break; - case CH_CURS_UP: - --StackAddr; - break; + case 'a': +#ifdef CH_CURS_UP: + case CH_CURS_UP: +#endif + --StackAddr; + break; - case CH_CURS_DOWN: - ++StackAddr; - break; + case 'z': +#ifdef CH_CURS_DOWN + case CH_CURS_DOWN: +#endif + ++StackAddr; + break; - default: - return c; + default: + return c; - } + } - /* Update the window contents */ + /* Update the window contents */ UpdateStack (); } } @@ -1023,9 +1064,9 @@ static unsigned UpdateCStack (void) unsigned char y; for (y = CStackFrame.fd_y2-1; y > CStackFrame.fd_y1; --y) { - gotoxy (x, y); - cputhex16 (* (unsigned*)mem); - mem += 2; + gotoxy (x, y); + cputhex16 (* (unsigned*)mem); + mem += 2; } cputsxy (CStackFrame.fd_x1+1, CStackFrame.fd_y2-1, "->"); return mem; @@ -1058,35 +1099,41 @@ static char CStackHandler (void) while (1) { - /* Read and handle input */ - switch (c = GetKeyUpdate ()) { + /* Read and handle input */ + switch (c = GetKeyUpdate ()) { - case '+': + case '+': CStackAddr += BytesPerPage; - break; + break; - case '-': - CStackAddr -= BytesPerPage; - break; + case '-': + CStackAddr -= BytesPerPage; + break; - case 'o': - CStackHome (); - break; + case 'o': + CStackHome (); + break; - case CH_CURS_UP: - CStackAddr -= 2; - break; + case 'a': +#ifdef CH_CURS_UP + case CH_CURS_UP: +#endif + CStackAddr -= 2; + break; - case CH_CURS_DOWN: - CStackAddr += 2; - break; + case 'z': +#ifdef CH_CURS_DOWN + case CH_CURS_DOWN: +#endif + CStackAddr += 2; + break; - default: - return c; + default: + return c; - } + } - /* Update the window contents */ + /* Update the window contents */ UpdateCStack (); } } @@ -1094,7 +1141,7 @@ static char CStackHandler (void) /*****************************************************************************/ -/* Dump window stuff */ +/* Dump window stuff */ /*****************************************************************************/ @@ -1109,8 +1156,8 @@ static unsigned UpdateDump (void) unsigned char* p = (unsigned char*) mem; for (y = DumpFrame.fd_y1+1; y < DumpFrame.fd_y2; ++y) { - cputsxy (x, y, DbgMemDump (mem, Buf, DUMP_BYTES)); - mem += DUMP_BYTES; + cputsxy (x, y, DbgMemDump (mem, Buf, DUMP_BYTES)); + mem += DUMP_BYTES; } return mem; } @@ -1133,37 +1180,43 @@ static char DumpHandler (void) while (1) { - /* Read and handle input */ - switch (c = GetKeyUpdate ()) { + /* Read and handle input */ + switch (c = GetKeyUpdate ()) { - case '+': - DumpAddr += BytesPerPage; - break; + case '+': + DumpAddr += BytesPerPage; + break; - case '-': + case '-': DumpAddr -= BytesPerPage; - break; + break; - case 'g': - InputGoto (&DumpAddr); - break; + case 'g': + InputGoto (&DumpAddr); + break; - case 'o': - DumpHome (); - break; + case 'o': + DumpHome (); + break; - case CH_CURS_UP: - DumpAddr -= 8; - break; + case 'a': +#ifdef CH_CURS_UP + case CH_CURS_UP: +#endif + DumpAddr -= 8; + break; - case CH_CURS_DOWN: - DumpAddr += 8; - break; + case 'z': +#ifdef CH_CURS_DOWN + case CH_CURS_DOWN: +#endif + DumpAddr += 8; + break; - default: - return c; + default: + return c; - } + } /* Update the window contents */ UpdateDump (); @@ -1173,7 +1226,7 @@ static char DumpHandler (void) /*****************************************************************************/ -/* Help window stuff */ +/* Help window stuff */ /*****************************************************************************/ @@ -1201,7 +1254,7 @@ static char HelpHandler (void) /*****************************************************************************/ -/* Singlestep */ +/* Singlestep */ /*****************************************************************************/ @@ -1237,49 +1290,49 @@ static void SingleStep (char StepInto) switch (*(unsigned char*) brk_pc) { case OPC_JMP: - /* Set breakpoint at target */ - DbgSetTmpBreak (GetArg16 ()); - return; + /* Set breakpoint at target */ + DbgSetTmpBreak (GetArg16 ()); + return; case OPC_JMPIND: - /* Indirect jump, ignore CPU error when crossing page */ - DbgSetTmpBreak (*(unsigned*)GetArg16 ()); - return; - - case OPC_BPL: - case OPC_BMI: - case OPC_BVC: - case OPC_BVS: - case OPC_BCC: - case OPC_BCS: - case OPC_BNE: - case OPC_BEQ: - /* Be sure not to set the breakpoint twice if this is a jump to - * the following instruction. - */ - Offs = *(signed char*)(brk_pc+1); - if (Offs) { - DbgSetTmpBreak (brk_pc + Offs + 2); - } - break; + /* Indirect jump, ignore CPU error when crossing page */ + DbgSetTmpBreak (*(unsigned*)GetArg16 ()); + return; + + case OPC_BPL: + case OPC_BMI: + case OPC_BVC: + case OPC_BVS: + case OPC_BCC: + case OPC_BCS: + case OPC_BNE: + case OPC_BEQ: + /* Be sure not to set the breakpoint twice if this is a jump to + * the following instruction. + */ + Offs = ((signed char*)brk_pc)[1]; + if (Offs) { + DbgSetTmpBreak (brk_pc + Offs + 2); + } + break; case OPC_RTS: - /* Set a breakpoint at the return target */ - SetRTSBreak (); - return; + /* Set a breakpoint at the return target */ + SetRTSBreak (); + return; case OPC_RTI: - /* Set a breakpoint at the return target */ - DbgSetTmpBreak (GetStack16 (1)); - return; + /* Set a breakpoint at the return target */ + DbgSetTmpBreak (GetStack16 (1)); + return; case OPC_JSR: - if (StepInto) { - /* Set breakpoint at target */ - DbgSetTmpBreak (GetArg16 ()); - return; - } - break; + if (StepInto) { + /* Set breakpoint at target */ + DbgSetTmpBreak (GetArg16 ()); + return; + } + break; } /* Place a breakpoint behind the instruction */ @@ -1289,7 +1342,7 @@ static void SingleStep (char StepInto) /*****************************************************************************/ -/* High level window handling */ +/* High level window handling */ /*****************************************************************************/ @@ -1301,13 +1354,13 @@ static void RedrawStatic (char Frame) ActiveFrame = -1; /* Clear the screen hide the cursor */ - bordercolor (COLOR_BORDER); - bgcolor (COLOR_BACKGROUND); + (void) bordercolor (COLOR_BORDER); + (void) bgcolor (COLOR_BACKGROUND); clrscr (); cursor (0); /* Build the frame layout of the screen */ - textcolor (COLOR_FRAMELOW); + (void) textcolor (COLOR_FRAMELOW); DrawFrames (); /* Draw the prompt line */ @@ -1373,7 +1426,7 @@ static char GetKeyUpdate (void) /*****************************************************************************/ -/* Externally visible functions */ +/* Externally visible functions */ /*****************************************************************************/ @@ -1387,15 +1440,15 @@ void DbgEntry (void) /* If this is the first call, setup the display */ if (FirstTime) { - FirstTime = 0; - - /* Draw the window, default active frame is ASM frame */ - RedrawStatic (WIN_ASM); - InitAsm (); - InitReg (); - InitStack (); - InitCStack (); - UpdateDump (); + FirstTime = 0; + + /* Draw the window, default active frame is ASM frame */ + RedrawStatic (WIN_ASM); + InitAsm (); + InitReg (); + InitStack (); + InitCStack (); + UpdateDump (); } /* Only initialize variables here, don't do a display update. The actual @@ -1410,24 +1463,24 @@ void DbgEntry (void) done = 0; while (!done) { c = Frames [ActiveFrame]->fd_func (); - switch (c) { - - case '1': - case '2': - case '3': - case '4': - case '5': - ActivateFrame (c - '1', 0); - break; + switch (c) { - case '?': + case '1': + case '2': + case '3': + case '4': + case '5': + ActivateFrame (c - '1', 0); + break; + + case '?': #ifdef CH_F1 case CH_F1: #endif HelpHandler (); break; - case 'u': + case 'u': #ifdef CH_F3 case CH_F3: #endif @@ -1436,7 +1489,7 @@ void DbgEntry (void) done = 1; break; - case 'h': + case 'h': #ifdef CH_F4 case CH_F4: #endif @@ -1458,7 +1511,7 @@ void DbgEntry (void) } break; - case '\n': + case '\n': #ifdef CH_F8 case CH_F8: #endif @@ -1495,3 +1548,4 @@ void DbgEntry (void) } +