sm64pc/src/goddard/debug_utils.h

92 lines
2.8 KiB
C

#ifndef GD_DEBUGGING_UTILS_H
#define GD_DEBUGGING_UTILS_H
#include <ultra64.h>
#include "gd_types.h"
#define GD_NUM_MEM_TRACKERS 32
#define GD_NUM_TIMERS 32
// structs
struct MemTracker {
/* 0x00 */ const char *name;
/* 0x04 */ f32 begin; // in bytes?
/* 0x08 */ f32 end;
/* 0x0C */ f32 total;
};
struct GdTimer {
/* 0x00 */ s32 start; // in cycles
/* 0x04 */ s32 end; // in cycles
/* 0x08 */ s32 total; // in cycles
/* 0x0C */ f32 unk0C;
/* 0x10 */ f32 scaledTotal; // total / sTimeScaleFactor (1.0f) Unused function modified value
/* 0x14 */ f32 prevScaledTotal;
/* 0x18 */ const char *name;
/* 0x1C */ s32 unk1C;
/* 0x20 */ s32 resetCount;
}; // sizeof = 0x24
union PrintVal {
f32 f;
s32 i;
s64 pad;
};
/* based on fields set in gd_fopen; gd_malloc_perm(84) for size */
struct GdFile {
/* 0x00 */ u8 pad00[4];
/* 0x04 */ u32 pos;
/* 0x08 */ s8 *stream;
/* Known Flags for +0xC field:
** 1 : write mode
** 2 : binary mode
** 4 : eof */
/* 0x0C */ u32 flags;
/* 0x10 */ u8 pad10[0x50-0x10];
/* 0x50 */ u32 size;
}; /* sizeof() = 0x54 */
// bss
extern u8 *gGdStreamBuffer;
// functions
extern struct MemTracker *start_memtracker(const char *);
extern u32 stop_memtracker(const char *);
extern void remove_all_memtrackers(void);
extern struct MemTracker *get_memtracker_by_id(s32);
extern void print_all_memtrackers(void);
extern void print_all_timers(void);
extern void deactivate_timing(void);
extern void activate_timing(void);
extern void remove_all_timers(void);
extern struct GdTimer *get_timer(const char *);
extern struct GdTimer *get_timernum(s32);
extern void start_timer(const char *);
extern void restart_timer(const char *);
extern void split_timer(const char *);
extern void stop_timer(const char *);
extern f32 get_scaled_timer_total(const char *);
extern void fatal_print(const char *);
extern void fatal_printf(const char *, ...);
extern void add_to_stacktrace(const char *);
extern void imout(void);
extern f32 func_8018D560(void);
extern s32 gd_atoi(const char *);
extern f64 gd_lazy_atof(const char *, u32 *);
extern char *sprint_val_withspecifiers(char *, union PrintVal, char *);
extern void gd_strcpy(char *, const char *);
extern char *gd_strdup(const char *);
extern u32 gd_strlen(const char *);
extern char *gd_strcat(char *, const char *);
extern s32 gd_str_not_equal(const char *, const char *);
extern s32 gd_str_contains(const char *, const char *);
extern s32 gd_feof(struct GdFile *);
extern struct GdFile *gd_fopen(const char *, const char *);
extern s32 gd_fread(s8 *, s32, s32, struct GdFile *);
extern void gd_fclose(struct GdFile *);
extern u32 gd_get_file_size(struct GdFile *);
extern s32 gd_fread_line(char *, u32, struct GdFile *);
#endif /* GD_DEBUGGING_UTILS_H */