LOG.C

[目次 | 関数]

目次

関数一覧


   1|/**************************************************************************
   2|  1. <<< 処理の記録 (Log)  >>> 
   3|***************************************************************************/
   4|
   5|
   6|#include  <Log.ah>  /* Auto include header, Look at mixer-... folder */
   7|
   8| 
   9|/*---------------------------------------------------------------------*/
  10|/* 2. <<<◆(Log) 処理の記録 >>> */ 
  11|/*---------------------------------------------------------------------*/
  12|
  13| 
  14|/**************************************************************************
  15|  3. <<< [Log_init] 初期化する >>> 
  16|【引数】
  17|  ・Log*  m;   処理の記録
  18|***************************************************************************/
  19|void  Log_init( Log* m )
  20|{
  21|  ERRORS_INITCHK( m, 0 );
  22|
  23|  m->mem = NULL;
  24|  m->console = 0;
  25|  #ifdef  USES_FILEX
  26|    m->file = NULL;
  27|  #endif
  28|  #ifdef  FOR_WIN32
  29|    //m->edit = 0;
  30|  #endif
  31|
  32|  ERRORS_FINISHCHK_FOR_INIT( Log_finish );
  33|}
  34|
  35|
  36| 
  37|/**************************************************************************
  38|  4. <<< [Log_finish] 後始末する >>> 
  39|***************************************************************************/
  40|void  Log_finish( Log* m )
  41|{
  42|  ERRORS_INITCHK( m, 1 );
  43|  ERRORS_FINISHCHK_FOR_FINISH( Log_finish );
  44|
  45|//  if ( m->file != NULL )
  46|  //  fclose( m->file );
  47|}
  48|
  49|
  50| 
  51|/**************************************************************************
  52|  5. <<< [Log_print] デバッグ表示する >>> 
  53|***************************************************************************/
  54|#ifndef  ERRORS_CUT_DEBUG_TOOL
  55|void  Log_print( Log* m, const char* title )
  56|{
  57|  Errors_printf( "%sLog[%p]", title, m );
  58|  Errors_printf( "%s mem = %p, mem_over = %p, mem_p = %p",
  59|    title, m->mem, m->mem_over, m->mem_p );
  60|  Errors_printf( "%s console = %d", title, m->console );
  61|  #ifdef  USES_FILEX
  62|    Errors_printf( "%s file = 0x%p", title, m->file );
  63|  #endif
  64|  #ifdef  FOR_WIN32
  65|    //Errors_printf( "%s edit = 0x%X", title, m->edit );
  66|  #endif
  67|}
  68|#endif
  69|
  70|
  71| 
  72|/**************************************************************************
  73|  6. <<< [Log_setMemory] メモリへの出力を設定する >>> 
  74|【引数】
  75|  ・Log*  m;   処理の記録
  76|  ・void*  mem;   メモリ領域の先頭アドレス
  77|  ・int mem_size; メモリ領域のサイズ
  78|***************************************************************************/
  79|void  Log_setMemory( Log* m, void* mem, int mem_size )
  80|{
  81|  ERRORS_INITCHK( m, 1 );
  82|
  83|  m->mem = mem;
  84|  m->mem_over = (char*)mem + mem_size;
  85|  m->mem_p = mem;
  86|}
  87|
  88|
  89| 
  90|/**************************************************************************
  91|  7. <<< [Log_setConsole] コンソールへの出力を設定する >>> 
  92|【引数】
  93|  ・Log*  m;   処理の記録
  94|  ・int   sw;     コンソール・スイッチ
  95|【補足】
  96|・switch には、出力をオンにするものを次の定数から選んで | (or) で結びます。
  97|  Log_StdOut, Log_StdErr
  98|・printf に出力する前後に改行を出力するとき、sw に以下の定数を | (or) で結びます。
  99|  Log_StdOut_RetBefore, Log_StdOut_RetAfter
 100|***************************************************************************/
 101|void  Log_setConsole( Log* m, int sw )
 102|{
 103|  ERRORS_INITCHK( m, 1 );
 104|
 105|  m->console = sw;
 106|}
 107|
 108|
 109| 
 110|/**************************************************************************
 111|  8. <<< [Log_setFile] ファイルへの出力を設定する >>> 
 112|【引数】
 113|  ・Log*  m;   処理の記録
 114|  ・char*  path;  ファイルパス
 115|***************************************************************************/
 116|#ifdef  USES_FILEX
 117|void  Log_setFile( Log* m, const char* path )
 118|{
 119|  m->file = FileX_open( path, "rt" );
 120|}
 121|#endif
 122| 
 123|/**************************************************************************
 124|  9. <<< [Log_setEditCtrl] エディット・コントロールへの出力を設定する >>> 
 125|【引数】
 126|  ・Log*  m;    処理の記録
 127|  ・CEdit*  edit;  エディット・コンソール
 128|***************************************************************************/
 129|#ifdef  FOR_WIN32
 130|#if 0
 131|void  Log_setEditCtrl( Log* m, CEdit* edit )
 132|{
 133|  m->edit = edit;
 134|  Errors_notSupport();
 135|}
 136|#endif
 137|#endif
 138| 
 139|/**************************************************************************
 140|  10. <<< [Log_printf] 出力する >>> 
 141|【引数】
 142|  ・Log*  m;   処理の記録
 143|  ・char*  fmt;   書式
 144|  ・...           変数の列挙
 145|***************************************************************************/
 146|void  Log_printf( Log* m, const char* fmt, ... )
 147|{
 148|  if ( m->mem != NULL ) {
 149|    va_list  va;
 150|    char*  p;
 151|    char*  p_over;
 152|    char*  ps;
 153|    char   s[1];  /* infinite size */
 154|
 155|    va_start( va, fmt );
 156|    vsprintf( s, fmt, va );
 157|    va_end( va );
 158|
 159|    p = m->mem_p;
 160|    p_over = m->mem_over;
 161|    ps = s;
 162|    for ( ; *ps != '\0' && p < p_over; p++, ps++ )
 163|      *p = *ps;
 164|    m->mem_p = p;
 165|  }
 166|
 167|  if ( m->console & Log_StdOut ) {
 168|    va_list  va;
 169|
 170|    if ( m->console & Log_StdOut_RetBefore )
 171|      fputc( '\n', stdout );
 172|
 173|    va_start( va, fmt );
 174|    vfprintf( stdout, fmt, va );
 175|    va_end( va );
 176|
 177|    if ( m->console & Log_StdOut_RetAfter )
 178|      fputc( '\n', stdout );
 179|  }
 180|
 181|  if ( m->console & Log_StdErr ) {
 182|    va_list  va;
 183|
 184|    va_start( va, fmt );
 185|    vfprintf( stderr, fmt, va );
 186|    va_end( va );
 187|  }
 188|
 189|  if ( m->file != NULL ) {
 190|    va_list  va;
 191|
 192|    va_start( va, fmt );
 193|    vfprintf( m->file, fmt, va );
 194|    va_end( va );
 195|  }
 196|}
 197| 
 198|/**************************************************************************
 199|  11. <<< [Log_clear] これまでの出力をクリアする >>> 
 200|【引数】
 201|  ・Log*  m;   処理の記録
 202|***************************************************************************/
 203|void  Log_clear( Log* m )
 204|{
 205|  if ( m->mem != NULL ) {
 206|    m->mem_p = m->mem;
 207|  }
 208|  if ( m->file != NULL ) {
 209|    rewind( m->file );
 210|  }
 211|}
 212| 
 213|