Only in .: #README.3.2# Only in .: Makefile diff /usr/src/1/driver-3.2.1@130/STACKMACHINE ./STACKMACHINE 13a14,16 > Anm. von Sunblade : > In dieser Skizze ist "unten" eine Hoehere addresse ! > 16c19 < Frame pointer-> | Argument number 0 --- > Frame pointer-> | fp[0] Argument number 0 24,25c27,28 < | etc < v --- > sp[-1] | etc > sp[0] v Only in .: access_check.o Only in .: array.o Common subdirectories: /usr/src/1/driver-3.2.1@130/autoconf and ./autoconf Only in .: backend.o Only in .: call_out.o Only in .: closure.o diff /usr/src/1/driver-3.2.1@130/comm.h ./comm.h 116a117,118 > int debug_level; > char *debug_prefix; diff /usr/src/1/driver-3.2.1@130/comm1.c ./comm1.c 1453a1454,1455 > new_interactive->debug_prefix = 0; > new_interactive->debug_level = 0; Only in .: comm1.c~ Only in .: comm1.o diff /usr/src/1/driver-3.2.1@130/config.h ./config.h 12c12 < #define ERQ_DIR "/user/src/mud/erq" --- > #define ERQ_DIR "/usr/local/mud/erq" 17c17 < #define ACCESS_CONTROL --- > #undef ACCESS_CONTROL 24c24 < #define ACCESS_RESTRICTED --- > #undef ACCESS_RESTRICTED 86c86 < #define EVALUATOR_STACK_SIZE 1000 --- > #define EVALUATOR_STACK_SIZE 4000 111c111 < #define PORTNO 7680 --- > #define PORTNO 3333 116c116 < #define MAX_LOCAL 20 --- > #define MAX_LOCAL 60 122c122 < #define MAX_COST 100000 --- > #define MAX_COST 1000000 211,213c211,213 < #define COMPAT_MODE < #undef NATIVE_MODE < #undef EUIDS --- > #undef COMPAT_MODE > #define NATIVE_MODE > #define EUIDS 229c229 < #define SUPPLY_PARSE_COMMAND --- > #undef SUPPLY_PARSE_COMMAND 237c237 < #undef INITIALIZATION_BY___INIT --- > #define INITIALIZATION_BY___INIT Only in .: config.status Only in .: core Only in .: debfile.c Only in .: debsup.c Only in .: difflang Common subdirectories: /usr/src/1/driver-3.2.1@130/doc and ./doc Only in .: driver Only in .: dumpstat.o Only in .: ed.o Only in .: efun_defs.c diff /usr/src/1/driver-3.2.1@130/exec.h ./exec.h 75a76,78 > // *** Anm. von mir eingefuegt, da sonst die Variablennamen verlorengehen. > > 85a89,100 > > struct variable *variable_names; > > // *** Hier stehen die Namen der einzelnenn lokalen Variablen > // *** und Parameter drinne. ACHTUNG !!!! > // *** dies Tun sie aber auch NUR in der Struktur des Programmes, > // *** in der die Funktion definiert wird. (!!!) > // *** d.h. sucht man die lokalen Variablen eines inhertidenen Files, > // *** muss man auch die Struktur verwenden, die das Programm > // *** des inheriteden Files benutzt. Nicht die Struktur des Programmes, > // *** das aus der inheritnace resultiert. > // struct variable *parameter_names; 117a133,146 > > struct function *funktionsdaten; // *** Von Sunblade eingefuegt. > // *** In dieser Struktur stehen alle Funktionen des aktuellen Programmes. > // *** ACHTUNG ! > // *** Zwar enthalten diese Funktionen auch verweise auf die lokalen Parameter, > // *** allerdings koennen diese nur verwendet werden, wenn man auch > // *** DIE betrachtet, die in dem jeweiligen Programm defniert werden. > // *** d.h. Informationen ueber lokale Variablen, die inherited werden. > // *** sind in dieser Struktur nicht zu finden ! > > // *** Ich hab keinen Bock weiter zu schaun, ob die Funktionsdaten > // *** noch sonstwo gesichert werden ! > // *** (bzw. nach betrachten des Codes bezweifele ich das) > Only in .: exec.h~ Only in .: foo Only in .: foo.txt diff /usr/src/1/driver-3.2.1@130/func_spec ./func_spec 431a432 > int debugfile(string, int); 433d433 < object debugfile(string); Only in /usr/src/1/driver-3.2.1@130/: func_spec~ Common subdirectories: /usr/src/1/driver-3.2.1@130/gcc and ./gcc Only in .: gcollect.o Only in .: hash.o Common subdirectories: /usr/src/1/driver-3.2.1@130/hosts and ./hosts diff /usr/src/1/driver-3.2.1@130/instrs.h ./instrs.h 6,7c6,7 < extern struct instr instrs[519]; < extern short efun_aliases[3]; --- > extern struct instr instrs[518]; > extern short efun_aliases[2]; 9,25c9,24 < #define F_ADD_ACTION (F_OFFSET+102) < #define F_ALL_INVENTORY (F_OFFSET+103) < #define F_ALLOCATE (F_OFFSET+104) < #define F_APPLY (F_OFFSET+105) < #define F_ASSOC (F_OFFSET+106) < #define F_BIND_LAMBDA (F_OFFSET+107) < #define F_BREAK_POINT (F_OFFSET+108) < #define F_CALL_OTHER (F_OFFSET+109) < #define F_CALL_OUT (F_OFFSET+110) < #define F_CALL_OUT_INFO (F_OFFSET+111) < #define F_CAPITALIZE (F_OFFSET+112) < #define F_CAT (F_OFFSET+113) < #define F_CLEAR_BIT (F_OFFSET+114) < #define F_CLONE_OBJECT (F_OFFSET+115) < #define F_CLOSUREP (F_OFFSET+116) < #define F_COMMAND (F_OFFSET+117) < #define F_CREATOR (F_OFFSET+118) --- > #define F_ADD_ACTION (F_OFFSET+103) > #define F_ALL_INVENTORY (F_OFFSET+104) > #define F_ALLOCATE (F_OFFSET+105) > #define F_APPLY (F_OFFSET+106) > #define F_ASSOC (F_OFFSET+107) > #define F_BIND_LAMBDA (F_OFFSET+108) > #define F_BREAK_POINT (F_OFFSET+109) > #define F_CALL_OTHER (F_OFFSET+110) > #define F_CALL_OUT (F_OFFSET+111) > #define F_CALL_OUT_INFO (F_OFFSET+112) > #define F_CAPITALIZE (F_OFFSET+113) > #define F_CAT (F_OFFSET+114) > #define F_CLEAR_BIT (F_OFFSET+115) > #define F_CLONE_OBJECT (F_OFFSET+116) > #define F_CLOSUREP (F_OFFSET+117) > #define F_COMMAND (F_OFFSET+118) 49,117c48,116 < #define F_IMPLODE (F_OFFSET+142) < #define F_INPUT_TO (F_OFFSET+143) < #define F_INSERT_ALIST (F_OFFSET+144) < #define F_INTERACTIVE (F_OFFSET+145) < #define F_INTERSECT_ALIST (F_OFFSET+146) < #define F_INTP (F_OFFSET+147) < #define F_LAMBDA (F_OFFSET+148) < #define F_LIVING (F_OFFSET+149) < #define F_LOWER_CASE (F_OFFSET+150) < #define F_M_DELETE (F_OFFSET+151) < #define F_M_INDICES (F_OFFSET+152) < #define F_M_VALUES (F_OFFSET+153) < #define F_MAP_ARRAY (F_OFFSET+154) < #define F_MAP_MAPPING (F_OFFSET+155) < #define F_MAPPINGP (F_OFFSET+156) < #define F_MEMBER (F_OFFSET+157) < #define F_MEMBER_ARRAY (F_OFFSET+158) < #define F_MKDIR (F_OFFSET+159) < #define F_MKMAPPING (F_OFFSET+160) < #define F_MOVE_OBJECT (F_OFFSET+161) < #define F_NEGATE (F_OFFSET+162) < #define F_NEXT_INVENTORY (F_OFFSET+163) < #define F_NOTIFY_FAIL (F_OFFSET+164) < #define F_OBJECTP (F_OFFSET+165) < #define F_ORDER_ALIST (F_OFFSET+166) < #define F_POINTERP (F_OFFSET+167) < #define F_PRESENT (F_OFFSET+168) < #define F_PRINTF (F_OFFSET+169) < #define F_PROCESS_STRING (F_OFFSET+170) < #define F_QUERY_ACTIONS (F_OFFSET+171) < #define F_QUERY_LOAD_AVERAGE (F_OFFSET+172) < #define F_QUERY_VERB (F_OFFSET+173) < #define F_QUOTE (F_OFFSET+174) < #define F_RANDOM (F_OFFSET+175) < #define F_READ_BYTES (F_OFFSET+176) < #define F_READ_FILE (F_OFFSET+177) < #define F_REGEXP (F_OFFSET+178) < #define F_REMOVE_CALL_OUT (F_OFFSET+179) < #define F_RENAME (F_OFFSET+180) < #define F_REPLACE_PROGRAM (F_OFFSET+181) < #define F_RESTORE_OBJECT (F_OFFSET+182) < #define F_RM (F_OFFSET+183) < #define F_RMDIR (F_OFFSET+184) < #define F_RUSAGE (F_OFFSET+185) < #define F_SAVE_OBJECT (F_OFFSET+186) < #define F_SAY (F_OFFSET+187) < #define F_SET_BIT (F_OFFSET+188) < #define F_SET_HEART_BEAT (F_OFFSET+189) < #define F_SET_LIGHT (F_OFFSET+190) < #define F_SET_THIS_OBJECT (F_OFFSET+191) < #define F_SETEUID (F_OFFSET+192) < #define F_SIZEOF (F_OFFSET+193) < #define F_SNOOP (F_OFFSET+194) < #define F_SORT_ARRAY (F_OFFSET+195) < #define F_SPRINTF (F_OFFSET+196) < #define F_STRINGP (F_OFFSET+197) < #define F_STRLEN (F_OFFSET+198) < #define F_SYMBOL_FUNCTION (F_OFFSET+199) < #define F_SYMBOLP (F_OFFSET+200) < #define F_TAIL (F_OFFSET+201) < #define F_TELL_OBJECT (F_OFFSET+202) < #define F_TELL_ROOM (F_OFFSET+203) < #define F_TEST_BIT (F_OFFSET+204) < #define F_THIS_INTERACTIVE (F_OFFSET+205) < #define F_THIS_OBJECT (F_OFFSET+206) < #define F_THIS_PLAYER (F_OFFSET+207) < #define F_THROW (F_OFFSET+208) < #define F_TIME (F_OFFSET+209) < #define F_TRANSFER (F_OFFSET+210) --- > #define F_GETUID (F_OFFSET+142) > #define F_IMPLODE (F_OFFSET+143) > #define F_INPUT_TO (F_OFFSET+144) > #define F_INSERT_ALIST (F_OFFSET+145) > #define F_INTERACTIVE (F_OFFSET+146) > #define F_INTERSECT_ALIST (F_OFFSET+147) > #define F_INTP (F_OFFSET+148) > #define F_LAMBDA (F_OFFSET+149) > #define F_LIVING (F_OFFSET+150) > #define F_LOWER_CASE (F_OFFSET+151) > #define F_M_DELETE (F_OFFSET+152) > #define F_M_INDICES (F_OFFSET+153) > #define F_M_VALUES (F_OFFSET+154) > #define F_MAP_ARRAY (F_OFFSET+155) > #define F_MAP_MAPPING (F_OFFSET+156) > #define F_MAPPINGP (F_OFFSET+157) > #define F_MEMBER (F_OFFSET+158) > #define F_MEMBER_ARRAY (F_OFFSET+159) > #define F_MKDIR (F_OFFSET+160) > #define F_MKMAPPING (F_OFFSET+161) > #define F_MOVE_OBJECT (F_OFFSET+162) > #define F_NEGATE (F_OFFSET+163) > #define F_NEXT_INVENTORY (F_OFFSET+164) > #define F_NOTIFY_FAIL (F_OFFSET+165) > #define F_OBJECTP (F_OFFSET+166) > #define F_ORDER_ALIST (F_OFFSET+167) > #define F_POINTERP (F_OFFSET+168) > #define F_PRESENT (F_OFFSET+169) > #define F_PRINTF (F_OFFSET+170) > #define F_PROCESS_STRING (F_OFFSET+171) > #define F_QUERY_ACTIONS (F_OFFSET+172) > #define F_QUERY_LOAD_AVERAGE (F_OFFSET+173) > #define F_QUERY_VERB (F_OFFSET+174) > #define F_QUOTE (F_OFFSET+175) > #define F_RANDOM (F_OFFSET+176) > #define F_READ_BYTES (F_OFFSET+177) > #define F_READ_FILE (F_OFFSET+178) > #define F_REGEXP (F_OFFSET+179) > #define F_REMOVE_CALL_OUT (F_OFFSET+180) > #define F_RENAME (F_OFFSET+181) > #define F_REPLACE_PROGRAM (F_OFFSET+182) > #define F_RESTORE_OBJECT (F_OFFSET+183) > #define F_RM (F_OFFSET+184) > #define F_RMDIR (F_OFFSET+185) > #define F_RUSAGE (F_OFFSET+186) > #define F_SAVE_OBJECT (F_OFFSET+187) > #define F_SAY (F_OFFSET+188) > #define F_SET_BIT (F_OFFSET+189) > #define F_SET_HEART_BEAT (F_OFFSET+190) > #define F_SET_LIGHT (F_OFFSET+191) > #define F_SET_THIS_OBJECT (F_OFFSET+192) > #define F_SETEUID (F_OFFSET+193) > #define F_SIZEOF (F_OFFSET+194) > #define F_SNOOP (F_OFFSET+195) > #define F_SORT_ARRAY (F_OFFSET+196) > #define F_SPRINTF (F_OFFSET+197) > #define F_STRINGP (F_OFFSET+198) > #define F_STRLEN (F_OFFSET+199) > #define F_SYMBOL_FUNCTION (F_OFFSET+200) > #define F_SYMBOLP (F_OFFSET+201) > #define F_TAIL (F_OFFSET+202) > #define F_TELL_OBJECT (F_OFFSET+203) > #define F_TELL_ROOM (F_OFFSET+204) > #define F_TEST_BIT (F_OFFSET+205) > #define F_THIS_INTERACTIVE (F_OFFSET+206) > #define F_THIS_OBJECT (F_OFFSET+207) > #define F_THIS_PLAYER (F_OFFSET+208) > #define F_THROW (F_OFFSET+209) > #define F_TIME (F_OFFSET+210) 123,143c122,142 < #define F_PROTECTED_RR_RANGE_LVALUE (F_OFFSET+256) < #define F_PROTECTED_EXTRACT_LVALUE (F_OFFSET+257) < #define F_UNDEF (F_OFFSET+258) < #define F_END_CATCH (F_OFFSET+259) < #define F_BREAK_CONTINUE (F_OFFSET+260) < #define F_BREAKN_CONTINUE (F_OFFSET+261) < #define F_NR_RANGE (F_OFFSET+262) < #define F_RN_RANGE (F_OFFSET+263) < #define F_RR_RANGE (F_OFFSET+264) < #define F_EXTRACT1 (F_OFFSET+265) < #define F_PUSH_PROTECTED_INDEXED_LVALUE (F_OFFSET+266) < #define F_PUSH_PROTECTED_RINDEXED_LVALUE (F_OFFSET+267) < #define F_PUSH_PROTECTED_INDEXED_MAP_LVALUE (F_OFFSET+268) < #define F_NR_RANGE_LVALUE (F_OFFSET+269) < #define F_RN_RANGE_LVALUE (F_OFFSET+270) < #define F_RR_RANGE_LVALUE (F_OFFSET+271) < #define F_PROTECTED_INDEX_LVALUE (F_OFFSET+272) < #define F_PROTECTED_RINDEX_LVALUE (F_OFFSET+273) < #define F_PROTECTED_RANGE_LVALUE (F_OFFSET+274) < #define F_PROTECTED_NR_RANGE_LVALUE (F_OFFSET+275) < #define F_PROTECTED_RN_RANGE_LVALUE (F_OFFSET+276) --- > #define F_PROTECTED_EXTRACT_LVALUE (F_OFFSET+256) > #define F_UNDEF (F_OFFSET+257) > #define F_END_CATCH (F_OFFSET+258) > #define F_BREAK_CONTINUE (F_OFFSET+259) > #define F_BREAKN_CONTINUE (F_OFFSET+260) > #define F_NR_RANGE (F_OFFSET+261) > #define F_RN_RANGE (F_OFFSET+262) > #define F_RR_RANGE (F_OFFSET+263) > #define F_EXTRACT1 (F_OFFSET+264) > #define F_PUSH_PROTECTED_INDEXED_LVALUE (F_OFFSET+265) > #define F_PUSH_PROTECTED_RINDEXED_LVALUE (F_OFFSET+266) > #define F_PUSH_PROTECTED_INDEXED_MAP_LVALUE (F_OFFSET+267) > #define F_NR_RANGE_LVALUE (F_OFFSET+268) > #define F_RN_RANGE_LVALUE (F_OFFSET+269) > #define F_RR_RANGE_LVALUE (F_OFFSET+270) > #define F_PROTECTED_INDEX_LVALUE (F_OFFSET+271) > #define F_PROTECTED_RINDEX_LVALUE (F_OFFSET+272) > #define F_PROTECTED_RANGE_LVALUE (F_OFFSET+273) > #define F_PROTECTED_NR_RANGE_LVALUE (F_OFFSET+274) > #define F_PROTECTED_RN_RANGE_LVALUE (F_OFFSET+275) > #define F_PROTECTED_RR_RANGE_LVALUE (F_OFFSET+276) 187,223c186,224 < #define F_EFUN308 (F_OFFSET+390) < #define F_EXPAND_DEFINE (F_OFFSET+391) < #define F_FUNCTIONLIST (F_OFFSET+392) < #define F_GET_ERROR_FILE (F_OFFSET+393) < #define F_GET_EXTRA_WIZINFO (F_OFFSET+394) < #define F_HEART_BEAT_INFO (F_OFFSET+395) < #define F_INHERIT_LIST (F_OFFSET+396) < #define F_LAST_INSTRUCTIONS (F_OFFSET+397) < #define F_QUERY_EDITING (F_OFFSET+398) < #define F_QUERY_IDLE (F_OFFSET+399) < #define F_QUERY_SHADOWING (F_OFFSET+400) < #define F_QUERY_SNOOP (F_OFFSET+401) < #define F_REGEXPLODE (F_OFFSET+402) < #define F_REMOVE_ACTION (F_OFFSET+403) < #define F_REMOVE_INTERACTIVE (F_OFFSET+404) < #define F_RENAME_OBJECT (F_OFFSET+405) < #define F_SEND_ERQ (F_OFFSET+406) < #define F_SEND_IMP (F_OFFSET+407) < #define F_SET_AUTO_INCLUDE_STRING (F_OFFSET+408) < #define F_SET_BUFFER_SIZE (F_OFFSET+409) < #define F_SET_CONNECTION_CHARSET (F_OFFSET+410) < #define F_SET_DRIVER_HOOK (F_OFFSET+411) < #define F_SET_EXTRA_WIZINFO (F_OFFSET+412) < #define F_SET_IS_WIZARD (F_OFFSET+413) < #define F_SET_MODIFY_COMMAND (F_OFFSET+414) < #define F_SET_PROMPT (F_OFFSET+415) < #define F_SET_THIS_PLAYER (F_OFFSET+416) < #define F_SHADOW (F_OFFSET+417) < #define F_SHUTDOWN (F_OFFSET+418) < #define F_SYMBOL_VARIABLE (F_OFFSET+419) < #define F_TO_OBJECT (F_OFFSET+420) < #define F_TRACE (F_OFFSET+421) < #define F_TRACEPREFIX (F_OFFSET+422) < #define F_TRANSPOSE_ARRAY (F_OFFSET+423) < #define F_UNBOUND_LAMBDA (F_OFFSET+424) < #define F_UNSHADOW (F_OFFSET+425) < #define F_WIZLIST_INFO (F_OFFSET+426) --- > #define F_DEBUGFILE (F_OFFSET+390) > #define F_EFUN308 (F_OFFSET+391) > #define F_EXPAND_DEFINE (F_OFFSET+392) > #define F_FUNCTIONLIST (F_OFFSET+393) > #define F_GET_ERROR_FILE (F_OFFSET+394) > #define F_GET_EXTRA_WIZINFO (F_OFFSET+395) > #define F_HEART_BEAT_INFO (F_OFFSET+396) > #define F_INHERIT_LIST (F_OFFSET+397) > #define F_LAST_INSTRUCTIONS (F_OFFSET+398) > #define F_QUERY_EDITING (F_OFFSET+399) > #define F_QUERY_IDLE (F_OFFSET+400) > #define F_QUERY_SHADOWING (F_OFFSET+401) > #define F_QUERY_SNOOP (F_OFFSET+402) > #define F_REGEXPLODE (F_OFFSET+403) > #define F_REGREPLACE (F_OFFSET+404) > #define F_REMOVE_ACTION (F_OFFSET+405) > #define F_REMOVE_INTERACTIVE (F_OFFSET+406) > #define F_RENAME_OBJECT (F_OFFSET+407) > #define F_SEND_ERQ (F_OFFSET+408) > #define F_SEND_IMP (F_OFFSET+409) > #define F_SET_AUTO_INCLUDE_STRING (F_OFFSET+410) > #define F_SET_BUFFER_SIZE (F_OFFSET+411) > #define F_SET_CONNECTION_CHARSET (F_OFFSET+412) > #define F_SET_DRIVER_HOOK (F_OFFSET+413) > #define F_SET_EXTRA_WIZINFO (F_OFFSET+414) > #define F_SET_IS_WIZARD (F_OFFSET+415) > #define F_SET_MODIFY_COMMAND (F_OFFSET+416) > #define F_SET_PROMPT (F_OFFSET+417) > #define F_SET_THIS_PLAYER (F_OFFSET+418) > #define F_SHADOW (F_OFFSET+419) > #define F_SHUTDOWN (F_OFFSET+420) > #define F_SYMBOL_VARIABLE (F_OFFSET+421) > #define F_TO_OBJECT (F_OFFSET+422) > #define F_TRACE (F_OFFSET+423) > #define F_TRACEPREFIX (F_OFFSET+424) > #define F_TRANSPOSE_ARRAY (F_OFFSET+425) > #define F_UNBOUND_LAMBDA (F_OFFSET+426) > #define F_UNSHADOW (F_OFFSET+427) > #define F_WIZLIST_INFO (F_OFFSET+428) Only in .: int.c Only in .: int.c~ diff /usr/src/1/driver-3.2.1@130/interpret.c ./interpret.c 13a14,22 > > /* by Sunblade start */ > #define NUMLINES 78 > // *** Anzahl an Spalten, auf die die Ausgabe des Debuggers optimiert wird. > > #define SHOWLINES 10 > // *** Anzahl an Zeilen, die von dem Original-Quellcode ausgegeben werden. > /* by Sunblade end */ > 72a82,143 > // *** By sunblade > // *** is dazu da damit der ganze Quark zum darstellen des LPC-Codes > // *** nicht nochmal eingelesen werden muss, > // *** wenn er im Speicher is ! > char *current_cache_file; > char *current_cache_data; > int current_cache_line; > int current_cache_file_size; > > int last_displayed_line; > char *last_displayed_file; > struct displayed_functions *last_displayed_function; > struct displayed_functions *first_displayed_function; > > /* fuers Debuggen */ > int running_program; > // *** == 1, wenn das Programm alaeuft, bis der naechte Breakpoint > // *** kommt. Ansonsten == 0. > > > > int flags_for_next_line; > /* Die Flags, die die Bedinungen fuer die naechste > anzuzeigende Zeile setzen: > * 0 : > * Alle SMCs anzeigen, die der akutellen Maske entsprechen > * > * FLAG_SHOW_IF_BREAKPOINT : > * Zeile nur anzeigen, wenn auch ein Breakpoint gesetzt ist. > * > * FLAG_TRACE_INTO_NEXT_FUNCTION : > * Gesetzt, wenn in die naechste Funktion reingetract werden soll, die > * "normal" aufgerufen wird. Wird nach dem Aufrufen der Funktion > * automatisch geloescht. > * > * > * Auswertung : > * Wenn ein Breakpoint gesetzt ist, auf jeden Fall anzeige. > * Wenn kein Breakpoint, aber im "Auf-Breakpoint-Warten"-Modus, dann raus. > * > * Ansonsten gilt : > */ > #define FLAG_SHOW_IF_BREAKPOINT 1 > #define FLAG_TRACE_INTO_NEXT_FUNCTION 2 > #define FLAG_SHOW_THIS_FUNCTION 4 > > > #define DEBUGGER_VERSION V0.1b-p0.01 > #define F_DEBUG_ON 1 > // *** Wird in der interactive-Strukt eingetragen, > // *** wenn man debuggt. > > int num_breakpoints; > struct breakpoint *first_breakpoint; > > > struct breakpoint *breakpoint_exists( int curr_line, char *curr_file ); > int test_for_debug(); > void do_lpc_debug( char *my_pc, char *stackinst, char *parm2, char *parm3 ); > void do_lpc_debug_return (); > /* by Sunblade ende */ > 101c172,174 < static void do_trace PROT((char *, char *, char *)); --- > static void do_trace PROT((char *, char *, char *, char *)); > static void do_line_trace PROT((char *, char *, char *)); > 2781a2855 > 2816c2890 < do_trace("Call direct ", name, " "); --- > do_trace("Call direct ", name, " ",0); 2832a2907 > // do_lpc_debug(0,name,"Call direct"," "); 2842c2917,2918 < do_trace("Return", "", ""); --- > do_trace("Return", "", "",0); > // do_lpc_debug_return(); 2853a2930 > // do_lpc_debug_return(); 2924a3002,3008 > // if (test_for_debug() != 0) > // { > // char *funname; > // memcpy((char *)&funname, funstart - 1 - sizeof funname, sizeof funname); > // do_lpc_debug(0,funname,"Call Direct",""); > // } > 3218c3302,3307 < if (++eval_cost >= 0) { --- > if (test_for_debug() != 0) > { > do_lpc_debug(pc,get_f_name(instruction),"Exec ","\n"); > } > > if (++eval_cost >= 0) { 3223c3312 < do_trace("Exec ", get_f_name(instruction), "\n"); --- > do_trace("Exec ", get_f_name(instruction), "\n",pc); 3227a3317,3320 > /* if (test_for_debug() != 0) > { > do_lpc_debug(pc,get_f_name(instruction),"Exec ","\n"); > } */ 3665a3759,3760 > if (test_for_debug() != 0) > { do_lpc_debug_return(); } 3671a3767,3768 > if (test_for_debug() != 0) > { do_lpc_debug_return(); } 5621c5718 < do_trace("Call other ", arg[1].u.string, "\n"); --- > do_trace("Call other ", arg[1].u.string, "\n",0); 9449c9546 < do_trace("Call other ", arg[1].u.string, "\n"); --- > do_trace("Call other ", arg[1].u.string, "\n",0); 10050c10147 < do_trace("Apply", "", "\n"); --- > do_trace("Apply", "", "\n",0); 10197,10198c10294,10295 < if (p > PROGRAM_END(*progp)) < fatal("Illegal offset %d in object %s\n", offset, progp->name); --- > // if (p > PROGRAM_END(*progp)) > // fatal("Illegal offset %d in object %s\n", offset, progp->name); 11525a11623,11927 > > /* Quick & Dirty zum Flags ausgeben ! */ > char *get_current_function() > { > /* liefert einen Zeiger auf den Namen der aktuellen Funktion zuureck */ > // return (char *)(csp->funstart[-5]); > } > > char *read_lines_from_file( int middleline, char *name ) > { > /* Megaquick & Megadirty ! */ > int preread; > int lauf1; > int lauf2; > FILE *dateizeiger; > char tempbuff[10000]; > char tempbuff2[1000]; > // char *tempstring; > > if (SHOWLINES == 0) { return 0; } // *** 0 -> Keine Anzeige. > > // *** Wenn die Daten den bereits gespeicherten entsprechen, > // *** dann diese recyceln. > if ((current_cache_file != 0) && (strcmp(current_cache_file,name) == 0) && > (middleline == current_cache_line)) > { > return current_cache_data; > } > > // *** So, das Zeugs ist *nicht* im Cache. > if (current_cache_file != 0) > free(current_cache_file); > if (current_cache_data != 0) > free(current_cache_data); > > > dateizeiger = fopen(name, "r"); > if (dateizeiger == NULL) { return 0; > } > /* Beschissen Programmiert ! */ > /* DRINGENDDST optimieren !!! */ > > preread = middleline - (SHOWLINES / 2); > > lauf2 = 0; > > while (preread > 0) > { > lauf2++; > fgets(tempbuff,10000,dateizeiger); > preread--; > } > > > current_cache_line = middleline; > current_cache_data = malloc(10000); > // tempstring = malloc(10000); > current_cache_file = malloc(strlen(name)+1); > current_cache_data[0] = 0x00; // *** den String entleeren > strcpy(current_cache_file,name); > tempbuff[0] = 0x00; // *** Den Puffer leeren > > > for (lauf1 = 0; lauf1 < SHOWLINES;lauf1++) > { > lauf2++; > if (fgets(tempbuff,10000,dateizeiger) != NULL) > { > if (lauf2 == middleline) > { > if (breakpoint_exists(lauf2,name) != 0) > { sprintf(tempbuff2,"%d:B>",lauf2); } else > { sprintf(tempbuff2,"%d: >",lauf2); } > } else > if (breakpoint_exists(lauf2,name) != 0) > { // *** Wir haben einen Breakpoint ! > sprintf(tempbuff2,"%d:B ",lauf2); > } else > { > sprintf(tempbuff2,"%d: ",lauf2); > } > strcat(current_cache_data,tempbuff2); > strcat(current_cache_data,tempbuff); > // strcat(tempstring,tempbuff2); > // strcat(tempstring,tempbuff); > } > } > > while (fgets(tempbuff,10000,dateizeiger) != NULL) > { lauf2++; } > current_cache_file_size = lauf2; > fclose(dateizeiger); > return current_cache_data; > > } > > > #include "debsup.c" > > void do_lpc_debug_return() > { > struct displayed_functions *tempzeiger; > /* Diese Funktion wird aufgerufen, wenn ein Ruecksprung aus einer > * Funktion in eine uebergeordnete geschieht. Ich muss in diesem > * Fall von meinem Funktionsstack den letzen Wert entfernen. > */ > if (last_displayed_function == 0) > { debug_message("Schwerer Debugger-Fehler ! ICSP-Underflow !\n"); > return; } > > /* Wenn ich nicht von der richtigen Funktion zurueckkomme.... */ > /* (hier werden *ALLE* funktionsreturns gesammelt) */ > if (last_displayed_function->functioncsp != csp) > { return; } > > if (last_displayed_function->prev == 0) > { /* Dies ist das einizige Element in der Kette. */ > free(last_displayed_function->in_file); > free(last_displayed_function); > last_displayed_function = 0; > first_displayed_function = 0; > } else > { tempzeiger = last_displayed_function; > /* Das vorletzte Element darauf vorbereiten, das es das letzte ist */ > last_displayed_function->prev->next = 0; > last_displayed_function = tempzeiger->prev; > free(tempzeiger->in_file); > free(tempzeiger); > } > > } > > void do_lpc_debug( char *my_pc, char *stackinst, char *parm2, char *parm3 ) > { > struct breakpoint *temp_breakpoint; > int debug_ok; > char buf[10000]; > char buf2[10000]; > char *objname; > struct svalue *tempsvalue; > int lauf1; > int lauf2; > int lauf3; > char *temppointer; > char *temp_source_from_file; > char *my_inter_pc; > int temp; > int temp2; > int print_banner; > struct object *old_interactive; > struct function *tempfunktion; > > debug_ok = 0; > > /* to do : Bei Return diese FUnktion nit mehr aufrufen ! */ > if (parm2 != 0) { if (strcmp(parm2,"Return") == 0) { return; } } > > if (current_prog == 0) { return; } > /* Current_prog kann in seltenen Faellen == 0, werden > * allerdings nicht nur innerhalb von HBs. Auf jedenfall ist es dann > * uninetressant was passiert > */ > > temppointer = &(buf2); > temp2 = get_line_number(my_pc,current_prog, &temppointer); > > /* Zu Coredump-Zeweckenn ;) */ > sprintf(buf,"Datei : %s Zeile : %d",current_prog->name,temp2); > debug_message(buf); > > temp_breakpoint = breakpoint_exists(temp2,current_prog->name); > > /* > * Auswertung : > * Wenn ein Breakpoint gesetzt ist, auf jeden Fall anzeige. > * Wenn kein Breakpoint, aber im "Auf-Breakpoint-Warten"-Modus, dann raus. > */ > > if ((temp_breakpoint != 0)) > { // *** Wenn ein Breakpoint in dieser Zeile existiert, und das > // *** Programm im running-Modus ist, eine Nachricht ausgeben, das > // *** ein Breakpoint erreicht wurde. > running_program = 0; // *** Fallback in den single-Step-Modus > > add_message("\n\n--- Breakpoint erreicht !!! ---\n"); > add_message("Breakpoint Nr. %d, Datei %s, Zeile %d.", > temp_breakpoint->number,temp_breakpoint->in_file,temp_breakpoint->line); > > } else > { > if ((running_program == 1)) { return; } > > /* So. Jetz kommt die Buchhaltung ueber den Funktionenstack. > * Es ist fuer mich einfacher, selber Buch darueber zu fuehren, als in > * dem Control-Stack nachzuschaun. > */ > /* Aha. Das ist die erste Funktion die wir uns anschauen. Auf jeden > * Fall diese betrachten. > */ > > if (last_displayed_function == 0) > { > /* Es ist bis jetz die erste und letzte betrachtete Funktion auf unserem > * Stack > */ > first_displayed_function = malloc(sizeof( struct displayed_functions )); > last_displayed_function = first_displayed_function; > first_displayed_function->functioncsp = csp; > first_displayed_function->in_file = malloc(strlen(temppointer)+1); > strcpy(first_displayed_function->in_file,temppointer); > first_displayed_function->next = 0; > first_displayed_function->prev = 0; > first_displayed_function->flags = FLAG_SHOW_THIS_FUNCTION; > > } > > if (last_displayed_function->functioncsp == csp ) > { > if ((last_displayed_function->flags & FLAG_SHOW_THIS_FUNCTION) == 0) > { return; } > } else > { > /* Pruefen, ob in die Funktion reingetract werden soll */ > if ((flags_for_next_line & FLAG_TRACE_INTO_NEXT_FUNCTION) != 0) > { > /* Ja. Dann die Funktion an den interen Control Stack anhaengen. */ > last_displayed_function->next = malloc(sizeof(struct displayed_functions )); > last_displayed_function->next->functioncsp = csp; > last_displayed_function->next->in_file = malloc(strlen(temppointer)+1); > strcpy(last_displayed_function->next->in_file,temppointer); > last_displayed_function->next->prev = last_displayed_function; > last_displayed_function = last_displayed_function->next; > last_displayed_function->next = 0; > last_displayed_function->flags = FLAG_SHOW_THIS_FUNCTION; > } else > { > return; > } > } > > } > > /* Kontrollieren, ob ich in dieser Zeile schoneinmal einen SMC angezeigt habe. */ > if ((temp2 == last_displayed_line) && > ((last_displayed_file != 0) && (strcmp(temppointer,last_displayed_file) == 0))) > { return; } else > { > if (last_displayed_file != 0) { free(last_displayed_file); } > last_displayed_file = malloc(strlen(temppointer)+1); > strcpy(last_displayed_file,temppointer); > last_displayed_line = temp2; > } > > /* Reintracen wird nicht aufgeschoben. Wenn das Ding keine > * Funktion war, wo mein reintracen Wollte, passiert nix. > */ > flags_for_next_line = flags_for_next_line & !(FLAG_TRACE_INTO_NEXT_FUNCTION); > print_banner = 1; > while (!debug_ok) > { > /* Das Banner ausgeben. Hier kann ruhige getroedelt werden, es wird eh auf > * eine Benutzerinteraktion gewartet... So schnell sieht das niemand ! > */ > if (print_banner == 1) > { > sprintf(buf,"\n--< Sunblades LPC-Debugger V0.1b-p0.01 : /%s >---%n",current_object->name,&temp); > add_message(buf); > if (temp < NUMLINES) { for (lauf1 = 0; lauf1 < (NUMLINES - temp); lauf1++ ) add_message("-"); } > add_message("\n"); > > > temp_source_from_file = read_lines_from_file(temp2,temppointer); > add_message(temp_source_from_file); > > > sprintf(buf,"--</%s:%s>-<%d/%d>%n",current_prog->name, > (char *) (*( (char **) (&csp->funstart[-5]) )), > temp2,current_cache_file_size,&temp); > > add_message(buf); > if (temp < NUMLINES) { for (lauf1 = 0; lauf1 < (NUMLINES - temp); lauf1++ ) add_message("-"); } > add_message("\n"); > add_message(MESSAGE_FLUSH); > print_banner = 0; > } > > old_interactive = current_interactive; > // while (!debug_ok) > // { > add_message("(h=hilfe) ? >"); > add_message(MESSAGE_FLUSH); > > while ((!get_message(buf,sizeof buf )) && (command_giver = old_interactive)) {} > /* Auf die Eingabe warten ! */ > > // *** in dem Maindebug steht alles wichtige ! > #include "maindebug.c" > > } > > add_message(MESSAGE_FLUSH); > } > > > 11527,11528c11929,11931 < do_trace(msg, fname, post) < char *msg, *fname, *post; --- > do_trace(msg, fname, post, my_pc) > char *msg, *fname, *post, *my_pc; > 11531a11935,11951 > struct object *old_interactive; > > if (!TRACEHB) > return; > objname = TRACETST(TRACE_OBJNAME) ? (current_object && current_object->name ? current_object->name : "??") : ""; > sprintf(buf, "*** %d %*s %s %s %s%s", tracedepth, tracedepth, "", msg, objname, fname, post); > // *** hohoho ! > debug_message(buf); > > // add_message(buf); > > // add_message(MESSAGE_FLUSH); > // do_lpc_debug(my_pc,fname,msg,post); > #ifdef DEBUG > add_message(MESSAGE_FLUSH); > #endif > } 11532a11953,11962 > > static void do_line_trace(msg, fname, post) > char *msg, *fname, *post; > { > // *** Dieses Trace wird verwendet, wenn die Zeilennummern korrekt > // *** abgebildet werden koennen. > char buf[10000]; > char *objname; > struct object *old_interactive; > 11537a11968,11970 > > add_message(MESSAGE_FLUSH); > do_lpc_debug(0,fname,msg,post); 11541,11542c11974,11975 < } < --- > } > 11831a12265,12284 > /* > int test_for_debug() > // *** Return 1 wenn man debuggen soll > { > struct interactive *wizard; > if (command_giver) > { > wizard = O_GET_INTERACTIVE(command_giver); > return (wizard->debug_level & F_DEBUG_ON); > } else > { > return 0; > } > > } > */ > int test_for_debug() > { > /* gut geklaut ist halb gewonnen ! */ > struct interactive *ip; 11832a12286,12291 > return command_giver && (ip = O_GET_INTERACTIVE(command_giver)) && > ip->sent.type == SENT_INTERACTIVE && ip->debug_level & F_DEBUG_ON && > (ip->debug_prefix == 0 || > (current_object && strpref(ip->debug_prefix, current_object->name))); > } > 12173a12633,12635 > > #include "debfile.c" > diff /usr/src/1/driver-3.2.1@130/interpret.h ./interpret.h 6a7,8 > > 27a30,61 > > // *** by Sunblade, start > // Speichert die lokalen funktionen > > struct sunblades_funktionsretter { > char *name; > int args; > int locals; > struct function *vars_u_params; > struct sunblades_funktionsretter *next; > > }; > > struct breakpoint { > int number; > char *in_file; > int line; > uint32 flags; // *** evtl. benoetigte Flags > > struct breakpoint *next; > }; > > struct displayed_functions { > struct control_stack *functioncsp; > int flags; > char *in_file; > struct displayed_functions *next; > struct displayed_functions *prev; > }; > > // *** by Sunblade, end > Only in .: interpret.o Only in .: lang.c Only in .: lang.c.old Only in .: lang.h Only in .: lang.o Only in .: lang.y Only in .: langold.c Only in .: lex.o Only in .: machine.h Only in .: main.o Only in .: maindebug.c Only in .: maindiff.diff Only in .: maindiff.diff~ Only in .: make_func Only in .: make_func.c Only in .: make_func.o Only in .: mapping.o Common subdirectories: /usr/src/1/driver-3.2.1@130/mudlib and ./mudlib Only in .: object.o Only in .: old Only in .: old.10 Only in .: old.11 Only in .: old.12 Only in .: old.13 Only in .: old.14 Only in .: old.15 Only in .: old.16 Only in .: old.17 Only in .: old.18 Only in .: old.19 Only in .: old.2 Only in .: old.20 Only in .: old.21 Only in .: old.22 Only in .: old.23 Only in .: old.24 Only in .: old.25 Only in .: old.26 Only in .: old.27 Only in .: old.28 Only in .: old.29 Only in .: old.3 Only in .: old.30 Only in .: old.31 Only in .: old.32 Only in .: old.33 Only in .: old.34 Only in .: old.35 Only in .: old.36 Only in .: old.37 Only in .: old.38 Only in .: old.39 Only in .: old.4 Only in .: old.40 Only in .: old.41 Only in .: old.42 Only in .: old.5 Only in .: old.6 Only in .: old.7 Only in .: old.8 Only in .: old.9 Only in .: otable.o Only in .: out.dic Only in .: out.txt Only in .: parse.o Only in .: parse_old.o Only in .: port.o diff /usr/src/1/driver-3.2.1@130/prolang.y ./prolang.y 703a704,707 > > int lauf1; // ** by Sunblade > struct ident *tempzeiger; // *** by Sunbalde > 772c776,812 < } --- > > } > > > // *** by Sunblade > if (funp->variable_names != 0) > { } > > > if ((num_local + num_arg) > 0) > { > funp->variable_names = malloc(sizeof(struct variable) * (num_local + num_arg)); > > // *** Wir haben eine verkette Liste > tempzeiger = all_locals; > lauf1 = 0; > while (tempzeiger != 0) > { > // funp->variable_names[lauf1].flags = tempzeiger.flags; > funp->variable_names[lauf1].name = > malloc(strlen(tempzeiger->name)+1); > strcpy(funp->variable_names[lauf1].name,tempzeiger->name); > funp->variable_names[lauf1].flags = 0; > // funp->variable_names[lauf1].name = > // make_shared_string(tempzeiger->name); > if (tempzeiger->next_all == 0) > { // *** Das letzte ELement durch ein FF in den Flags kennzeichnenen > funp->variable_names[lauf1].flags = 0xff; > } > tempzeiger = tempzeiger->next_all; > lauf1++; > } > } else funp->variable_names = 0; > > // *** by Sunblade ende > > 789a830,867 > > fun.variable_names = 0; > > // *** die Namen der lokalen Variablen eintragen, da sie sonst > // *** verworfen werden. > // *** by Sunblade -> begin > if ((num_local + num_arg) > 0) > { // *** Nur wenn wir auch wirklich was sichern wollen ;) > // printf( > fun.variable_names = malloc(sizeof(struct variable) * (num_local + num_arg)); > // *** Wir haben eine verkette Liste > tempzeiger = all_locals; > > lauf1 = 0; > while (tempzeiger != 0) > { > // *** Den Speicher fuer den String reservieren > fun.variable_names[lauf1].name = malloc(strlen(tempzeiger->name)+1); > strcpy(fun.variable_names[lauf1].name,tempzeiger->name); > fun.variable_names[lauf1].flags = 0; > // fun.variable_names[lauf1].name = > /* > > make_shared_string(tempzeiger->name);*/ > // xalloc(strlen(tempzeiger->name)+1); > // strcpy(fun.variable_names[lauf1].name,tempzeiger->name); > > // *** Falls wir das letzte Element haben, dieses kennzeichnen... > if (tempzeiger->next_all == 0) > { fun.variable_names[lauf1].flags = 0xff; } > > tempzeiger = tempzeiger->next_all; > lauf1++; > } > } else fun.variable_names = 0; > > > 5731c5809,5813 < prog->strings = (char **)p; --- > prog->funktionsdaten = xalloc( sizeof (struct function ) * num_functions); > memcpy(prog->funktionsdaten,mem_block[A_FUNCTIONS].block, sizeof( struct function) * num_functions); > > > prog->strings = (char **)p; Only in .: random.o Only in .: raus Only in .: rc5 Only in .: regexp.o Only in .: simul_efun.o Only in .: simulate.o Only in .: smalloc.o Only in .: sprintf.o Only in .: stralloc.o Only in .: swap.o Only in .: term Only in .: tips.txt Only in .: turbo.dsk Common subdirectories: /usr/src/1/driver-3.2.1@130/util and ./util Only in .: wiz_list.o Only in .: y.output Only in /usr/src/1/driver-3.2.1@130/: y.tab.c