From 3bed07c80a517b869447d21607cf2499b8334b16 Mon Sep 17 00:00:00 2001 From: kieron Date: Wed, 11 Apr 2018 13:21:05 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@483 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- src/tracer.pas | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/tracer.pas diff --git a/src/tracer.pas b/src/tracer.pas new file mode 100644 index 00000000..3ac04696 --- /dev/null +++ b/src/tracer.pas @@ -0,0 +1,64 @@ +unit tracer; + +interface + +procedure init; +procedure push_trace(t_name : pchar); +procedure pop_trace; +function get_last_trace : pchar; + +implementation + +uses + console, util, lists, strings; + +var + t_ready : Boolean = false; + Locked : Boolean = false; + TraceStack : PLinkedListBase; + +procedure lock; +begin + t_ready:= false; +end; + +procedure push_trace(t_name : pchar); +var + mem : void; + +begin + if not Initialized then exit; + console.writestringln('WTF?!?!?'); + if not Locked then begin + Locked:= true; + mem:= LL_Insert(TraceStack, 0); + memset(uint32(mem), 0, StringSize(t_name) + 5); + memcpy(uint32(t_name), uint32(mem), StringSize(t_name) + 1); + Locked:= false; + end; +end; + +procedure pop_trace; +begin + if not Initialized then exit; + if not Locked then begin + Locked:= true; + LL_Delete(TraceStack, 0); + Locked:= false; + end; +end; + +function get_last_trace : pchar; +begin + if not Initialized then exit; + get_last_trace:= pchar(LL_Get(TraceStack, 0)); +end; + +procedure init; +begin + TraceStack:= LL_New(255); + push_trace('kmain'); + Initialized:= true; +end; + +end. \ No newline at end of file