FireBirdLib - Topfield TMS PVR TAP Programming Library
CallTraceExitResult.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include "FBLib_debug.h"
3
4void CallTraceExitResult(dword *Magic, char *Result)
5{
6 char Spaces[101];
7 int i, j;
8 dword t;
9 byte *ISOText;
10 extern dword __tap_ud__;
11
12 if(CallTraceDoNotReenter) return;
14
15 t = TAP_GetTick();
16
18
19 Spaces[0] = '\0';
20
21 if(CallLevel > 0)
22 {
23 CallLevel--;
24
26 {
27 //Check if the proc name is already known by the stats array
28 j = -1;
29 for(i = 0; i < CallTraceStatsEntries; i++)
30 if(CallTraceStats[i].ProcName == CallTraceStack[CallLevel].ProcName)
31 {
32 j = i;
33 break;
34 }
35
36 //If not, use the next free entry
37 if(j == -1) j = CallTraceStatsEntries;
38
39 //Add the stats
40 if(j < CTSTATENTRIES)
41 {
43 if(CallTraceStats[j].ProcName)
44 {
45 //Already known
46 if((dword)i < CallTraceStats[j].MinTime) CallTraceStats[j].MinTime = i;
47 if((dword)i > CallTraceStats[j].MaxTime) CallTraceStats[j].MaxTime = i;
48 if(CallTraceStats[j].NrCalls < 0xffffffff)
49 {
52 }
53 }
54 else
55 {
56 //New procedure
63 }
64 }
65 }
66 }
67 else
68 LogEntryFBLibPrintf(TRUE, "CallLevel Underflow! (TAPID 0x%8.8lx)", __tap_ud__);
69
70
71 if((CallTraceEnabled || Magic) && Result)
72 {
73 memset(Spaces, ' ', CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100);
74 Spaces[CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100] = '\0';
75 StrToISOAlloc(Result, &ISOText);
76 if(ISOText && *ISOText) TAP_Print("%s = %s\n", Spaces, ISOText);
77 TAP_MemFree(ISOText);
78 }
79
80 if(Magic && *Magic != DEFAULTMAGIC)
81 {
82 TAP_Print("%sINVALID MAGIC!\n", Spaces);
83 *Magic = DEFAULTMAGIC;
84 }
85
87}
void CallTraceExitResult(dword *Magic, char *Result)
tCallTraceStack CallTraceStack[CTSTACKSIZE]
Definition: CallTraceInit.c:4
bool CallTraceInitialized
Definition: CallTraceInit.c:6
dword CallLevel
Definition: CallTraceInit.c:3
int CallTraceStatsEntries
Definition: CallTraceInit.c:8
tCallTraceStats * CallTraceStats
Definition: CallTraceInit.c:7
bool CallTraceEnabled
Definition: CallTraceInit.c:5
bool CallTraceDoNotReenter
Definition: CallTraceInit.c:9
void CallTraceInit(void)
Definition: CallTraceInit.c:11
#define DEFAULTMAGIC
Definition: FBLib_debug.h:6
#define CTSTATENTRIES
Definition: FBLib_debug.h:8
#define CTSTACKSIZE
Definition: FBLib_debug.h:7
const dword __tap_ud__
void LogEntryFBLibPrintf(bool Console, char *format,...)
#define TAP_Print
Definition: libFireBird.h:181
void StrToISOAlloc(const byte *SourceString, byte **DestString)
Definition: StrToISOAlloc.c:5