filehandle.c
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:4k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  **************************************************************************************
  3.  * file
  4.  *    filehandle.c
  5.  * brief
  6.  *     Trace file handling and standard error handling function.
  7.  * author
  8.  *    Main contributors (see contributors.h for copyright, address and affiliation details)
  9.  *      - Karsten Suehring            <suehring@hhi.de>
  10.  ***************************************************************************************
  11.  */
  12. #include "contributors.h"
  13. #include "global.h"
  14. #include "mbuffer.h"
  15. /*!
  16.  ************************************************************************
  17.  * brief
  18.  *    Error handling procedure. Print error message to stderr and exit
  19.  *    with supplied code.
  20.  * param text
  21.  *    Error message
  22.  * param code
  23.  *    Exit code
  24.  ************************************************************************
  25.  */
  26. void error(char *text, int code)
  27. {
  28.   fprintf(stderr, "%sn", text);
  29.   flush_dpb();
  30.   exit(code);
  31. }
  32. #if TRACE
  33. static int bitcounter = 0;
  34. /*!
  35. ************************************************************************
  36. * brief
  37. *    decrement trace bitcounter (used for special case in mb aff)
  38. ************************************************************************
  39. */
  40. void dectracebitcnt(int count)
  41. {
  42.   bitcounter -= count;
  43. }
  44. /*!
  45.  ************************************************************************
  46.  * brief
  47.  *    Tracing bitpatterns for symbols
  48.  *    A code word has the following format: 0 Xn...0 X2 0 X1 0 X0 1
  49.  ************************************************************************
  50.  */
  51. void tracebits(
  52.     const char *trace_str,  //!< tracing information, char array describing the symbol
  53.     int len,                //!< length of syntax element in bits
  54.     int info,               //!< infoword of syntax element
  55.     int value1)
  56. {
  57.   int i, chars;
  58.   // int outint = 1;
  59.   if(len>=34)
  60.   {
  61.     snprintf(errortext, ET_SIZE, "Length argument to put too long for trace to work");
  62.     error (errortext, 600);
  63.   }
  64.   putc('@', p_trace);
  65.   chars = fprintf(p_trace, "%i", bitcounter);
  66.   while(chars++ < 5)
  67.     putc(' ',p_trace);
  68.   chars += fprintf(p_trace, " %s", trace_str);
  69.   while(chars++ < 55)
  70.     putc(' ',p_trace);
  71.   // Align bitpattern
  72.   if(len<15)
  73.   {
  74.     for(i=0 ; i<15-len ; i++)
  75.       fputc(' ', p_trace);
  76.   }
  77.   // Print bitpattern
  78.   for(i=0 ; i<len/2 ; i++)
  79.   {
  80.     fputc('0', p_trace);
  81.   }
  82.   // put 1
  83.   fprintf(p_trace, "1");
  84.   // Print bitpattern
  85.   for(i=0 ; i<len/2 ; i++)
  86.   {
  87.       if (0x01 & ( info >> ((len/2-i)-1)))
  88.         fputc('1', p_trace);
  89.       else
  90.         fputc('0', p_trace);
  91.   }
  92.   fprintf(p_trace, " (%3d) n", value1);
  93.   bitcounter += len;
  94.   fflush (p_trace);
  95. }
  96. /*!
  97.  ************************************************************************
  98.  * brief
  99.  *    Tracing bitpatterns
  100.  ************************************************************************
  101.  */
  102. void tracebits2(
  103.     const char *trace_str,  //!< tracing information, char array describing the symbol
  104.     int len,                //!< length of syntax element in bits
  105.     int info)
  106. {
  107.   int i, chars;
  108.   // int outint = 1;
  109.   if(len>=45)
  110.   {
  111.     snprintf(errortext, ET_SIZE, "Length argument to put too long for trace to work");
  112.     error (errortext, 600);
  113.   }
  114.   putc('@', p_trace);
  115.   chars = fprintf(p_trace, "%i", bitcounter);
  116.   while(chars++ < 5)
  117.     putc(' ',p_trace);
  118.   chars += fprintf(p_trace, " %s", trace_str);
  119.   while(chars++ < 55)
  120.     putc(' ',p_trace);
  121.   // Align bitpattern
  122.   if(len<15)
  123.     for(i=0 ; i<15-len ; i++)
  124.       fputc(' ', p_trace);
  125.   bitcounter += len;
  126.   while (len >= 32)
  127.   {
  128.     for(i=0 ; i<8 ; i++)
  129.     {
  130.       fputc('0', p_trace);
  131.     }
  132.     len -= 8;
  133.   }
  134.   // Print bitpattern
  135.   for(i=0 ; i<len ; i++)
  136.   {
  137.     if (0x01 & ( info >> (len-i-1)))
  138.       fputc('1', p_trace);
  139.     else
  140.       fputc('0', p_trace);
  141.   }
  142.   fprintf(p_trace, " (%3d) n", info);
  143.   fflush (p_trace);
  144. }
  145. #endif