Esempio n. 1
0
void CallTraceComment(char *Comment)
{
    char                  Spaces[101];
    byte                 *ISOText;

    if(Comment)
    {
        if(!CallTraceInitialized) CallTraceInit();

        Spaces[0] = '\0';

        if(CallTraceEnabled)
        {
            memset(Spaces, ' ', CallLevel < 50 ? CallLevel << 1 : 100);
            Spaces[CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100] = '\0';

            StrToISOAlloc(Comment, &ISOText);
            if(ISOText && *ISOText) TAP_PrintNet("%s# %s\n", Spaces, ISOText);
            TAP_MemFree(ISOText);
        }
    }
}
Esempio n. 2
0
bool StrMkISO(byte *SourceString)
{
  TRACEENTER();

  byte                 *_isostring;
  bool                  hasAnsiChars, hasUTFChars;

  if(!SourceString)
  {
    TRACEEXIT();
    return FALSE;
  }

  if(!*SourceString)
  {
    TRACEEXIT();
    return TRUE;
  }

  GetStringEncoding(SourceString, &hasAnsiChars, &hasUTFChars);

  if(!hasAnsiChars && hasUTFChars)
  {
    StrToISOAlloc(SourceString, &_isostring);
    if(_isostring)
    {
      strcpy(SourceString, _isostring);
      TAP_MemFree(_isostring);
    }
    else
    {
      TRACEEXIT();
      return FALSE;
    }
  }

  TRACEEXIT();
  return TRUE;
}
Esempio n. 3
0
void LogEntryGeneric(char *ProgramName, bool Console, char *Text)
{
    TRACEENTER();

    char                 *s;
    int                   l;
    TYPE_File             *File;
    char                  TimeResult[40];
    char                  CRLF[] = {'\r', '\n'};
    byte                  Sec;
    byte                 *ISOText;

#define FILENAME      "TAPSystem.log"

    if(!ProgramName || !Text)
    {
        TRACEEXIT();
        return;
    }

    HDD_TAP_PushDir();
    if(!HDD_ChangeDir("/ProgramFiles/Settings"))
    {
        HDD_ChangeDir("/ProgramFiles");
        if(!TAP_Hdd_Exist("Settings")) TAP_Hdd_Create("Settings", ATTR_FOLDER);
        HDD_ChangeDir("Settings");
    }

    l = strlen(ProgramName) + strlen(Text) + 4;
    s = TAP_MemAlloc(l);
    if(s)
    {
        memset(s, 0, l);
        TAP_SPrint(s, "%s: %s", ProgramName, Text);
        StrToISOAlloc(s, &ISOText);
        if(ISOText)
        {
            TimeFormat(Now(&Sec), Sec, TIMESTAMP_YMDHMS, TimeResult);
            strcat(TimeResult, " ");

            if(!TAP_Hdd_Exist(FILENAME)) TAP_Hdd_Create(FILENAME, ATTR_NORMAL);
            if((File = TAP_Hdd_Fopen(FILENAME)) != NULL)
            {
                TAP_Hdd_Fseek(File, 0, SEEK_END);
                TAP_Hdd_Fwrite(TimeResult, strlen(TimeResult), 1, File);
                TAP_Hdd_Fwrite(ISOText, strlen(ISOText), 1, File);
                TAP_Hdd_Fwrite(CRLF, 2, 1, File);
                TAP_Hdd_Fclose(File);
            }

            if(Console)
            {
                TAP_PrintNet("%s%s\n", TimeResult, ISOText);
            }

            TAP_MemFree(ISOText);
        }
        TAP_MemFree(s);
    }
    HDD_TAP_PopDir();

    TRACEEXIT();
}
void CallTraceExitResult(dword *Magic, char *Result)
{
  char                  Spaces[101];
  int                   i, j;
  dword                 t;
  byte                 *ISOText;
  extern dword          __tap_ud__;

  if(CallTraceDoNotReenter) return;
  CallTraceDoNotReenter = TRUE;

  t = TAP_GetTick();

  if(!CallTraceInitialized) CallTraceInit();

  Spaces[0] = '\0';

  if(CallLevel > 0)
  {
    CallLevel--;

    if(CallTraceEnabled && CallTraceStats && CallLevel < CTSTACKSIZE)
    {
      //Check if the proc name is already known by the stats array
      j = -1;
      for(i = 0; i < CallTraceStatsEntries; i++)
        if(CallTraceStats[i].ProcName == CallTraceStack[CallLevel].ProcName)
        {
          j = i;
          break;
        }

      //If not, use the next free entry
      if(j == -1) j = CallTraceStatsEntries;

      //Add the stats
      if(j < CTSTATENTRIES)
      {
        i = t - CallTraceStack[CallLevel].EntryTime;
        if(CallTraceStats[j].ProcName)
        {
          //Already known
          if((dword)i < CallTraceStats[j].MinTime) CallTraceStats[j].MinTime = i;
          if((dword)i > CallTraceStats[j].MaxTime) CallTraceStats[j].MaxTime = i;
          if(CallTraceStats[j].NrCalls < 0xffffffff)
          {
            CallTraceStats[j].TotalTime += i;
            CallTraceStats[j].NrCalls++;
          }
        }
        else
        {
          //New procedure
          CallTraceStats[j].ProcName = CallTraceStack[CallLevel].ProcName;
          CallTraceStats[j].MinTime = i;
          CallTraceStats[j].MaxTime = i;
          CallTraceStats[j].TotalTime = i;
          CallTraceStats[j].NrCalls = 1;
          CallTraceStatsEntries++;
        }
      }
    }
  }
  else
    LogEntryFBLibPrintf(TRUE, "CallLevel Underflow! (TAPID 0x%8.8x)", __tap_ud__);


  if((CallTraceEnabled || Magic) && Result)
  {
    memset(Spaces, ' ', CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100);
    Spaces[CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100] = '\0';
    StrToISOAlloc(Result, &ISOText);
    if(ISOText && *ISOText) TAP_PrintNet("%s  = %s\n", Spaces, ISOText);
    TAP_MemFree(ISOText);
  }

  if(Magic && *Magic != DEFAULTMAGIC)
  {
    TAP_PrintNet("%sINVALID MAGIC!\n", Spaces);
    *Magic = DEFAULTMAGIC;
  }

  CallTraceDoNotReenter = FALSE;
}
Esempio n. 5
0
void LogEntry(char *FileName, char *ProgramName, bool Console, eTimeStampFormat TimeStampFormat, char *Text)
{
  TRACEENTER();

  int                   f;
  char                  TimeResult[40];
  char                  CRLF[] = {'\r', '\n'};
  byte                  Sec;
  byte                 *ISOText;
  char                  AbsFileName[FBLIB_DIR_SIZE];
  struct utimbuf        times;

  if(!Text)
  {
    TRACEEXIT();
    return;
  }

  TimeFormat(Now(&Sec), Sec, TimeStampFormat, TimeResult);
  if(TimeResult[0]) strcat(TimeResult, " ");

  if(FileName && FileName[0])
  {
    ConvertPathType(FileName, AbsFileName, PF_FullLinuxPath);
    f = open(AbsFileName, O_WRONLY | O_CREAT | O_APPEND);
    if(f >= 0)
    {
      write(f, TimeResult, strlen(TimeResult));
      if(Text && Text[0]) write(f, Text, strlen(Text));
      write(f, CRLF, 2);
      close(f);

      //As the log would receive the Linux time stamp (01.01.2000), adjust to the PVR's time
      times.actime = PvrTimeToLinux(Now(NULL));
      times.modtime = times.actime;
      utime(AbsFileName, &times);
    }
  }

  if(Console)
  {
    if(TimeStampFormat != TIMESTAMP_NONE) TAP_Print(TimeResult);
    if(ProgramName && ProgramName[0]) TAP_Print("%s: ", ProgramName);

    if(isUTFToppy())
    {
      if(strlen(Text) < 510)
      {
        TAP_Print("%s", Text);
      }
      else
      {
        char *p = Text;

        while(*p)
        {
          int     l;
          char    q;

          l = strlen(p);
          q = p[l];
          p[l] = '\0';
          TAP_Print("%s", p);
          p[l] = q;
          p += l;
        }
      }
      TAP_Print("\n");
    }
    else
    {
      //Max length is 512. If above, a buffer overflow may occur
      StrToISOAlloc(Text, &ISOText);
      if(ISOText && ISOText[0])
      {
        if(strlen(ISOText) < 510)
        {
          TAP_Print("%s", ISOText);
        }
        else
        {
          char *p = ISOText;

          while(*p)
          {
            int     l;
            char    q;

            l = strlen(p);
            if(l > 510) l = 510;

            q = p[l];
            p[l] = '\0';
            TAP_Print("%s", p);
            p[l] = q;
            p += l;
          }
        }
      }
      TAP_Print("\n");
      TAP_MemFree(ISOText);
    }
  }

  TRACEEXIT();
}