mirror of
https://github.com/ldmud/ldmud
synced 2026-08-12 14:26:05 -04:00
211 lines
7.9 KiB
C
211 lines
7.9 KiB
C
#define ABM add_message(buf);
|
|
#define CLRSCR add_message("\e[2J"); add_message(MESSAGE_FLUSH);
|
|
|
|
if ((strcmp(buf,"h") == 0) || (strcmp(buf,"hilfe") == 0))
|
|
{
|
|
CLRSCR;
|
|
add_message("Sunblades LPC-Debuggers Ultrakurzhilfeseite\n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
add_message(" h -> Hilfe\n");
|
|
add_message(" s -> Status\n");
|
|
add_message(" lv -> List Vars\n");
|
|
add_message(" lf -> List Functions\n");
|
|
add_message(" i -> Inspect Variable\n");
|
|
add_message(" b -> Breakpoint setzen\n");
|
|
add_message(" n -> Next Instruction\n");
|
|
add_message(" c -> Continue to Breakpoint\n");
|
|
add_message(" t -> Trace into fuction\n");
|
|
add_message(" rtfm -> Read the fine Manual\n");
|
|
add_message(MESSAGE_FLUSH);
|
|
} else
|
|
if (strcmp(buf,"rftm") == 0)
|
|
{
|
|
add_message("READ THE FUCKING MANUAL !\n");
|
|
} else
|
|
if ((strcmp(buf,"s") == 0) || (strcmp(buf,"status") == 0))
|
|
{
|
|
CLRSCR;
|
|
add_message("Statusinformationen ueber das aktuelle Objekt\n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
sprintf(buf," Name : %s\n",current_object->name); ABM;
|
|
sprintf(buf,"Anz. der globalen Vars : %d\n",current_object->prog->num_variables); ABM;
|
|
sprintf(buf," Anz. der Funktionen : %d\n",current_object->prog->num_functions); ABM;
|
|
sprintf(buf," Anz. der Strings : %d\n",current_object->prog->num_strings); ABM;
|
|
sprintf(buf," Anz. der Inherits : %d\n",current_object->prog->num_inherited); ABM;
|
|
add_message("\n");
|
|
add_message("Statusinformationen ueber die aktuelle Funktion \n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
add_message(" Name : "); add_message((char *) (*( (char **) (&csp->funstart[-5]) ))); add_message("\n");
|
|
sprintf(buf," Anz. der lokalen Vars : %d\n",(csp->num_local_variables - csp->funstart[0])); ABM;
|
|
sprintf(buf," Anz. der Parameter : %d\n",(csp->funstart[0])); ABM;
|
|
} else
|
|
if ((strcmp(buf,"lv") == 0) || (strcmp(buf,"list vars") == 0))
|
|
{
|
|
CLRSCR;
|
|
add_message("Liste der Variablen des aktuellen Objektes\n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
if (current_object)
|
|
{
|
|
add_message("Objektglobale Variablen : \n");
|
|
for (lauf1 = 0;lauf1 < current_object->prog->num_variables;lauf1++)
|
|
{
|
|
sprintf(buf,"%s%n",current_object->prog->variable_names[lauf1].name,&lauf2);
|
|
add_message(buf);
|
|
if (!((lauf1 % 2) != 0))
|
|
{ // *** Da es meist viele Objektglobale Variablen gibt, diese zweispaltig darstellen.
|
|
for (lauf3 = lauf2; lauf3 < (NUMLINES / 2); lauf3++)
|
|
{ add_message(" "); }
|
|
} else { add_message("\n"); }
|
|
}
|
|
if ((lauf1 % 2) != 0)
|
|
{ add_message("\n"); }
|
|
add_message("\n");
|
|
// add_message("Funktionslokale Variablen : \n");
|
|
tempfunktion = locate_function((char *) (*( (char **) (&csp->funstart[-5]) )),current_object->prog);
|
|
|
|
if (tempfunktion->variable_names != 0)
|
|
{
|
|
add_message("Funktionslokale Variablen : \n");
|
|
lauf1 = -1;
|
|
do
|
|
{
|
|
lauf1++;
|
|
sprintf(buf,"%s%n",tempfunktion->variable_names[lauf1].name,&lauf2);
|
|
add_message(buf);
|
|
if (!((lauf1 % 2) != 0))
|
|
{ // *** Da es meist viele Objektglobale Variablen gibt, diese zweispaltig darstellen.
|
|
for (lauf3 = lauf2; lauf3 < (NUMLINES / 2); lauf3++)
|
|
{ add_message(" "); }
|
|
} else { add_message("\n"); }
|
|
}
|
|
while (tempfunktion->variable_names[lauf1].flags != 0xff);
|
|
}
|
|
|
|
}
|
|
} else
|
|
if ((strcmp(buf,"lf") == 0) || (strcmp(buf,"list fun") == 0))
|
|
{
|
|
CLRSCR;
|
|
add_message("Liste der Funktionen des aktuellen Objektes\n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
sprintf(buf,"Anzahl der Funktionen : %d\n",current_object->prog->num_functions); ABM;
|
|
for (lauf1 = 0; lauf1 < current_object->prog->num_functions; lauf1++ )
|
|
{
|
|
printflags(buf2,current_object->prog->funktionsdaten[lauf1].flags);
|
|
sprintf(buf,"%s %s%n",buf2,current_object->prog->funktionsdaten[lauf1].name,&lauf2);
|
|
|
|
add_message(buf);
|
|
if (!((lauf1 % 2) != 0))
|
|
{ // *** Da es meist viele Objektglobale Variablen gibt, diese zweispaltig darstellen.
|
|
for (lauf3 = lauf2; lauf3 < (NUMLINES / 2); lauf3++)
|
|
{ add_message(" "); }
|
|
} else { add_message("\n"); }
|
|
}
|
|
} else
|
|
if ((sscanf(buf,"i %s",buf2) == 1) || (sscanf(buf,"inspect %s",buf2) == 1))
|
|
{
|
|
CLRSCR;
|
|
sprintf(buf,"Auswertung der Variablen %s : \n",buf2); ABM;
|
|
add_message("-------------------------------------------------------------\n");
|
|
// *** Erst festestellen. ob die Variable lokal vorhanden ist.
|
|
// *** Sollte dies der Fall sein, dann diese Deklaration der globalen vorziehen.
|
|
tempsvalue = get_local_variable_pointer(buf2);
|
|
if (tempsvalue != 0)
|
|
{
|
|
buf[0] = 0x00;
|
|
get_variable_data_for_svalue(buf,tempsvalue);
|
|
add_message(buf);
|
|
} else
|
|
{
|
|
tempsvalue = get_global_variable_pointer(buf2);
|
|
if (tempsvalue != 0)
|
|
{
|
|
buf[0] = 0x00;
|
|
get_variable_data_for_svalue(buf,tempsvalue);
|
|
add_message(buf);
|
|
} else
|
|
{
|
|
sprintf(buf," Leider konnte die Variable %s nicht gefunden werden !\n",buf2); ABM;
|
|
}
|
|
}
|
|
add_message("\n");
|
|
} else
|
|
if ((strcmp(buf,"lb") == 0) || (strcmp(buf,"list break") == 0))
|
|
{ // *** Da moechte jemand schaun, welche Breakpoints er schon definiert
|
|
// *** hat.
|
|
CLRSCR;
|
|
add_message("Anzeige der aktuell definierten Breakpoints\n");
|
|
add_message("-------------------------------------------------------------\n");
|
|
if (first_breakpoint == 0)
|
|
{
|
|
add_message("Bis jetzt sind noch keine Breakpoints definiert worden.\n");
|
|
} else
|
|
{
|
|
temp_breakpoint = first_breakpoint;
|
|
while (temp_breakpoint != 0)
|
|
{
|
|
add_message("Nr. %d : Datei %s, Zeile %d\n",temp_breakpoint->number,temp_breakpoint->in_file,temp_breakpoint->line);
|
|
temp_breakpoint = temp_breakpoint->next;
|
|
}
|
|
}
|
|
add_message("\n");
|
|
} else
|
|
if ((sscanf(buf,"b %s %d",buf2,&lauf1) == 2) || (sscanf(buf,"break %s %d",buf2,&lauf1) == 2))
|
|
{
|
|
num_breakpoints++;
|
|
sprintf(buf,"Breakpoint Nr. %d wird in der Datei %s, Zeile %d hinzugefuegt.\n",num_breakpoints,buf2,lauf1);
|
|
add_message(buf);
|
|
add_message("\n");
|
|
|
|
if (first_breakpoint == 0) // *** Bisher keine Breakpoints definiert.
|
|
{
|
|
temp_breakpoint = malloc(sizeof( struct breakpoint ));
|
|
first_breakpoint = temp_breakpoint;
|
|
} else
|
|
{
|
|
// *** Den letzten definierten Breakpoint suchen und da anhaengen.
|
|
temp_breakpoint = first_breakpoint;
|
|
while (temp_breakpoint->next != 0)
|
|
{ temp_breakpoint = temp_breakpoint->next; }
|
|
temp_breakpoint->next = malloc( sizeof(struct breakpoint ));
|
|
temp_breakpoint = temp_breakpoint->next;
|
|
}
|
|
// *** Die Struktur, in der wir unseren neuen Breakpoint ablegen koennen,
|
|
// *** ist nun in Temp-Breakpoint.
|
|
temp_breakpoint->next = 0; // *** Ich trau dem Mallloc nicht so ganz !
|
|
temp_breakpoint->line = lauf1;
|
|
temp_breakpoint->in_file = malloc(strlen(buf2)+1);
|
|
strcpy(temp_breakpoint->in_file,buf2);
|
|
temp_breakpoint->number = num_breakpoints;
|
|
} else
|
|
if ((strcmp(buf,"c") == 0) || (strcmp(buf,"continue") == 0))
|
|
{
|
|
running_program = 1;
|
|
debug_ok = 1;
|
|
add_message("Programm wird ausgefuehrt, bis ein Breakpoint erreicht wird !\n");
|
|
add_message(MESSAGE_FLUSH);
|
|
} else
|
|
if ((strcmp(buf,"n") == 0) || (strcmp(buf,"next") == 0))
|
|
{ /* Kein Match gefunden. Weitermachen. */
|
|
debug_ok = 1;
|
|
} else
|
|
if ((strcmp(buf,"d") == 0) || (strcmp(buf,"debughook") == 0))
|
|
{
|
|
add_message("Debug !\n");
|
|
add_message(MESSAGE_FLUSH);
|
|
} else
|
|
if ((strcmp(buf,"t") == 0) || (strcmp(buf,"trace") == 0))
|
|
{
|
|
debug_ok = 1;
|
|
flags_for_next_line = flags_for_next_line | FLAG_TRACE_INTO_NEXT_FUNCTION;
|
|
} else
|
|
if ((strcmp(buf,"fe") == 0) || (strcmp(buf,"funktionsede") == 0))
|
|
{
|
|
debug_ok = 1;
|
|
last_displayed_function->flags = (last_displayed_function->flags & !(FLAG_SHOW_THIS_FUNCTION));
|
|
}
|
|
{
|
|
/* Keine sinnvolle Eingabe -> Banner ausgeben */
|
|
print_banner = 1;
|
|
}
|
|
|