Subversion Repositories Kolibri OS

Rev

Rev 1870 | Rev 5270 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include <ddk.h>
  3. #include <mutex.h>
  4. #include <syscall.h>
  5.  
  6. #pragma pack(push, 1)
  7. typedef struct
  8. {
  9.   char sec;
  10.   char min;
  11.   char hour;
  12.   char rsv;
  13. }detime_t;
  14.  
  15. typedef struct
  16. {
  17.   char  day;
  18.   char  month;
  19.   short year;
  20. }dedate_t;
  21.  
  22. typedef struct
  23. {
  24.   unsigned    attr;
  25.   unsigned    flags;
  26.   union
  27.   {
  28.      detime_t  ctime;
  29.      unsigned  cr_time;
  30.   };
  31.   union
  32.   {
  33.      dedate_t  cdate;
  34.      unsigned  cr_date;
  35.   };
  36.   union
  37.   {
  38.      detime_t  atime;
  39.      unsigned  acc_time;
  40.   };
  41.   union
  42.   {
  43.      dedate_t  adate;
  44.      unsigned  acc_date;
  45.   };
  46.   union
  47.   {
  48.      detime_t  mtime;
  49.      unsigned  mod_time;
  50.   };
  51.   union
  52.   {
  53.      dedate_t  mdate;
  54.      unsigned  mod_date;
  55.   };
  56.   unsigned    size;
  57.   unsigned    size_high;
  58. } FILEINFO;
  59.  
  60. #pragma pack(pop)
  61.  
  62. typedef struct
  63. {
  64.   char *path;
  65.   int  offset;
  66. } dbgfile_t;
  67.  
  68. static dbgfile_t dbgfile;
  69.  
  70. #define va_start(v,l)   __builtin_va_start(v,l)
  71. #define va_end(v)       __builtin_va_end(v)
  72. #define va_arg(v,l)     __builtin_va_arg(v,l)
  73. #define __va_copy(d,s)  __builtin_va_copy(d,s)
  74.  
  75. typedef __builtin_va_list __gnuc_va_list;
  76. typedef __gnuc_va_list    va_list;
  77.  
  78. #define arg(x) va_arg (ap, u32_t)
  79.  
  80. int dbg_open(char *path)
  81. {
  82.     FILEINFO info;
  83.  
  84.     dbgfile.offset = 0;
  85.  
  86.     if(get_fileinfo(path,&info))
  87.     {
  88.         if(!create_file(path))
  89.         {
  90.             dbgfile.path = path;
  91.             return true;
  92.         }
  93.         else return false;
  94.     };
  95.     set_file_size(path, 0);
  96.     dbgfile.path   = path;
  97.     dbgfile.offset = 0;
  98.     return true;
  99. };
  100.  
  101. int vsnprintf(char *s, size_t n, const char *format, va_list arg);
  102.  
  103.  
  104. int printf(const char* format, ...)
  105. {
  106.     char  txtbuf[1024];
  107.     int   len = 0;
  108.  
  109.     va_list ap;
  110.  
  111.     va_start(ap, format);
  112.     if (format)
  113.         len = vsnprintf(txtbuf, 1024, format, ap);
  114.     va_end(ap);
  115.  
  116.     if( len )
  117.         SysMsgBoardStr(txtbuf);
  118.  
  119.     return len;
  120. }
  121.  
  122.  
  123. int dbgprintf(const char* format, ...)
  124. {
  125.     char      txtbuf[1024];
  126.     unsigned  writes;
  127.     int       len = 0;
  128.  
  129.     va_list   ap;
  130.  
  131.     va_start(ap, format);
  132.     if (format)
  133.       len = vsnprintf(txtbuf, 1024, format, ap);
  134.     va_end(ap);
  135.  
  136.     if( len )
  137.     {
  138.         if( dbgfile.path)
  139.         {
  140. /*  do not write into log file if interrupts disabled */
  141.  
  142.             if ( get_eflags() & (1 << 9) )
  143.             {
  144.                 write_file(dbgfile.path,txtbuf,dbgfile.offset,len,&writes);
  145.                 dbgfile.offset+=writes;
  146.             };
  147.         }
  148.         else SysMsgBoardStr(txtbuf);
  149.     };
  150.     return len;
  151. }
  152.  
  153. int xf86DrvMsg(int skip, int code, const char* format, ...)
  154. {
  155.     char      txtbuf[1024];
  156.     unsigned  writes;
  157.     va_list   ap;
  158.  
  159.     int       len = 0;
  160.  
  161.     va_start(ap, format);
  162.     if (format)
  163.         len = vsnprintf(txtbuf, 1024, format, ap);
  164.     va_end(ap);
  165.  
  166.     if( len )
  167.     {
  168.         SysMsgBoardStr(txtbuf);
  169.  
  170.         if(dbgfile.path)
  171.         {
  172.             write_file(dbgfile.path,txtbuf,dbgfile.offset,len,&writes);
  173.             dbgfile.offset+=writes;
  174.         };
  175.     };
  176.     return len;
  177. }
  178.  
  179.  
  180.  
  181.