linecnt.c

C:\home\SVGCats_src\src\linecnt.c

[目次 | 関数]

目次

関数一覧


   1|/**************************************************************************
   2|*  1. <<< BLex3 対応・行数カウンタ (LineCnt)  >>> 
   3|***************************************************************************/
   4|
   5|#include  <LineCnt.ah>  /* Auto include header, Look at mixer-... folder */
   6|
   7|
   8| 
   9|/*---------------------------------------------------------------------*/
  10|/* 2. <<<◆(LineCnt) BLex3 対応・行数カウンタ >>> */ 
  11|/*---------------------------------------------------------------------*/
  12|
  13|void  LineCnt_parse_sub( LineCnt*, char* beforeFp, char* afterFp );
  14| 
  15|/**************************************************************************
  16|*  3. <<< [LineCnt_init] 初期化する >>> 
  17|*【引数】
  18|*  ・LineCnt*  m;   BLex3 対応・行数カウンタ
  19|***************************************************************************/
  20|void  LineCnt_init( LineCnt* m )
  21|{
  22|  ERRORS_INITCHK( m, 0 );
  23|
  24|  m->iLine = 1;
  25|  m->iColumn = 1;
  26|  BLex3_Pos_init( &m->prevPos );
  27|}
  28|
  29|
  30| 
  31|/**************************************************************************
  32|*  4. <<< [LineCnt_print] デバッグ表示する >>> 
  33|***************************************************************************/
  34|#ifndef  ERRORS_CUT_DEBUG_TOOL
  35|void  LineCnt_print( LineCnt* m, const char* title )
  36|{
  37|  Errors_printf( "%sLineCnt[%p] eng=[%p] iLine=%d, iColumn=%d, prevPos=%d",
  38|    title, m, m->eng, m->iLine, m->iColumn, m->prevPos );
  39|}
  40|#endif
  41|
  42|
  43| 
  44|/**************************************************************************
  45|*  5. <<< [LineCnt_linkEngine] 字句解析エンジンと関連付ける >>> 
  46|*【引数】
  47|*  ・LineCnt*  m;     BLex3 対応・行数カウンタ
  48|*  ・BLex3_Engine* eng;  字句解析エンジン
  49|***************************************************************************/
  50|void  LineCnt_linkEngine( LineCnt* m, BLex3_Engine* eng )
  51|{
  52|  ERRORS_INITCHK( m, 1 );
  53|
  54|  m->eng = eng;
  55|}
  56|
  57|
  58| 
  59|/**************************************************************************
  60|*  6. <<< [LineCnt_parse] 行番号を解析する >>> 
  61|*【引数】
  62|*  ・LineCnt*  m;   BLex3 対応・行数カウンタ
  63|*【補足】
  64|*・行番号データを現在位置に合わせます。
  65|***************************************************************************/
  66|void  LineCnt_parse( LineCnt* m )
  67|{
  68|  BLex3_Pos  now;
  69|  BLex3_Pos  pos;
  70|  char*  fp;
  71|  char*  fp_over;
  72|
  73|  ERRORS_INITCHK( m, 1 );
  74|
  75|  BLex3_Engine_getPos( m->eng, &now );
  76|  BLex3_Engine_setPos( m->eng, &m->prevPos );
  77|
  78|  for (;;) {
  79|    fp = BLex3_Engine_getFilePtr( m->eng, 0 );
  80|    if ( fp == NULL )  return;
  81|    fp_over = BLex3_Engine_getOverPtr( m->eng );
  82|    BLex3_Engine_getPos2( m->eng, fp_over, &pos );
  83|    if ( now.pos <= pos.pos )
  84|      break;
  85|    LineCnt_parse_sub( m, fp, fp_over );
  86|    BLex3_Engine_nextBuf( m->eng );
  87|  }
  88|  LineCnt_parse_sub( m, fp,
  89|    BLex3_Engine_getFilePtrByPos( m->eng, now.pos ) );
  90|
  91|  #if  ERRORS_DEBUG_FALSE
  92|    Errors_printf( "line(%d,%d) pos 0x%lX .. 0x%lX",
  93|      m->iLine, m->iColumn, now.pos, m->prevPos.pos );
  94|  #endif
  95|
  96|  m->prevPos = now;
  97|}
  98|
  99|
 100| 
 101|/**************************************************************************
 102|*  7. <<< [LineCnt_parse_sub] 行番号を解析するサブルーチン >>> 
 103|*【引数】
 104|*  ・LineCnt*  m;  BLex3 対応・行数カウンタ
 105|*  ・char*  before;   これまで解析したファイルポインタの位置
 106|*  ・char*  after;    解析後のファイルポインタの位置
 107|*【補足】
 108|*・内部用です。
 109|***************************************************************************/
 110|void  LineCnt_parse_sub( LineCnt* m, char* beforeFp, char* afterFp )
 111|{
 112|  char*  fp;
 113|  int  iLine = m->iLine;
 114|  int  iColumn = m->iColumn;
 115|
 116|  for ( fp = beforeFp; fp < afterFp; fp++ ) {
 117|    if ( *fp == '\n' ) {
 118|      iLine ++;  iColumn = 1;
 119|    }
 120|    else
 121|      iColumn ++;
 122|  }
 123|  m->iLine = iLine;
 124|  m->iColumn = iColumn;
 125|}
 126| 
 127|/**************************************************************************
 128|*  8. <<< [LineCnt_getTokenType] トークンタイプを返す >>> 
 129|*【引数】
 130|*  ・LineCnt*  m;   BLex3 対応・行数カウンタ
 131|***************************************************************************/
 132|int  LineCnt_getTokenType( LineCnt* m )
 133|{
 134|  return  BLex3_OutOfToken;
 135|}
 136| 
 137|/**************************************************************************
 138|*  9. <<< [LineCnt_getNextParsePos] 次に字句解析する位置を取得する >>> 
 139|*【引数】
 140|*  ・LineCnt*  m;   BLex3 対応・行数カウンタ
 141|***************************************************************************/
 142|void  LineCnt_getNextParsePos( LineCnt* m, BLex3_Pos* pos )
 143|{
 144|  pos->pos = BLex3_PosForNoEvent;
 145|  pos->sjis_type = BLex3_SJisUnknown;
 146|}
 147| 
 148|/**************************************************************************
 149|*  10. <<< [LineCnt_printLastMsg] 処理後のメッセージを表示する >>> 
 150|*【引数】
 151|*  ・LineCnt*  m;   BLex3 対応・行数カウンタ
 152|***************************************************************************/
 153|void  LineCnt_printLastMsg( LineCnt* m, FILE* f, const char* title )
 154|{
 155|  ERRORS_INITCHK( m, 1 );
 156|
 157|  fprintf( f, "%sline count = %d\r\n", title, m->iLine );
 158|}
 159|
 160|
 161| 
 162|