Subversion Repositories Kolibri OS

Rev

Rev 6587 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include <ddk.h>
  3. #include <linux/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. int get_fileinfo(const char *path,FILEINFO *info);
  63. int create_file(const char *path);
  64. int set_file_size(const char *path, unsigned size);
  65. int write_file(const char *path,const void *buff,
  66.                unsigned offset,unsigned count,unsigned *writes);
  67.  
  68.  
  69. typedef struct
  70. {
  71.   char *path;
  72.   int  offset;
  73. } dbgfile_t;
  74.  
  75. static dbgfile_t dbgfile;
  76.  
  77. #define va_start(v,l)   __builtin_va_start(v,l)
  78. #define va_end(v)       __builtin_va_end(v)
  79. #define va_arg(v,l)     __builtin_va_arg(v,l)
  80. #define __va_copy(d,s)  __builtin_va_copy(d,s)
  81.  
  82. typedef __builtin_va_list __gnuc_va_list;
  83. typedef __gnuc_va_list    va_list;
  84.  
  85. #define arg(x) va_arg (ap, u32_t)
  86.  
  87. int dbg_open(char *path)
  88. {
  89.     FILEINFO info;
  90.  
  91.     dbgfile.offset = 0;
  92.  
  93.     if(get_fileinfo(path,&info))
  94.     {
  95.         if(!create_file(path))
  96.         {
  97.             dbgfile.path = path;
  98.             return true;
  99.         }
  100.         else return false;
  101.     };
  102.     set_file_size(path, 0);
  103.     dbgfile.path   = path;
  104.     dbgfile.offset = 0;
  105.     return true;
  106. };
  107.  
  108. int vsnprintf(char *s, size_t n, const char *format, va_list arg);
  109.  
  110.  
  111. int printf(const char* format, ...)
  112. {
  113.     char  txtbuf[1024];
  114.     int   len = 0;
  115.  
  116.     va_list ap;
  117.  
  118.     va_start(ap, format);
  119.     if (format)
  120.         len = vsnprintf(txtbuf, 1024, format, ap);
  121.     va_end(ap);
  122.  
  123.     if( len )
  124.         SysMsgBoardStr(txtbuf);
  125.  
  126.     return len;
  127. }
  128.  
  129.  
  130. int dbgprintf(const char* format, ...)
  131. {
  132.     char      txtbuf[1024];
  133.     unsigned  writes;
  134.     int       len = 0;
  135.  
  136.     va_list   ap;
  137.  
  138.     va_start(ap, format);
  139.     if (format)
  140.       len = vsnprintf(txtbuf, 1024, format, ap);
  141.     va_end(ap);
  142.  
  143.     if( len )
  144.     {
  145.         if( dbgfile.path)
  146.         {
  147. /*  do not write into log file if interrupts disabled */
  148.  
  149.             if ( get_eflags() & (1 << 9) )
  150.             {
  151.                 write_file(dbgfile.path,txtbuf,dbgfile.offset,len,&writes);
  152.                 dbgfile.offset+=writes;
  153.             };
  154.         }
  155.         else SysMsgBoardStr(txtbuf);
  156.     };
  157.     return len;
  158. }
  159.  
  160.  
  161.