亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fpattern.cpp

?? CAN__組建現場總線系統設計技術(光盤)
?? CPP
字號:
///////////////////////////////////////////////////////////////////////////
//  File:    fpattern.cpp
//  Version: 1.1.0.4
//  Updated: 19-Jul-1998
//
//  Copyright:  Ferdinand Prantl (I'm sorry, author unknown ...)
//  E-mail:     prantl@ff.cuni.cz
//
//  File-like string pattern matching routines
//
//  You are free to use or modify this code to the following restrictions:
//  - Acknowledge me somewhere in your about box, simple "Parts of code by.."
//  will be enough. If you can't (or don't want to), contact me personally.
//  - LEAVE THIS HEADER INTACT
////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "fpattern.h"

#if TEST
#define SUB     _T('~')
#else
#define SUB     FPAT_CLOSP
#endif

#ifndef DELIM
#define DELIM       0
#endif

#define DEL     FPAT_DEL

#ifdef __UNIX__
#define DEL2            FPAT_DEL
#define QUOTE           FPAT_QUOTE
#define lowercase( c )  ( c )
#else
#define DEL2            FPAT_DEL2
#define QUOTE           FPAT_QUOTE2
#define lowercase( c )  _totlower( c )
#endif

/*-----------------------------------------------------------------------------
 * fpattern_isvalid()
 *  Checks that filename pattern 'pat' is a well-formed pattern.
 *
 * Returns
 *  1 ( true ) if 'pat' is a valid filename pattern, otherwise 0 ( false ).
 *
 * Caveats
 *  If 'pat' is null, 0 ( false ) is returned.
 *
 *  If 'pat' is empty ( "" ), 1 ( true ) is returned, and it is considered a
 *  valid ( but degenerate ) pattern ( the only filename it matches is the
 *  empty ( "" ) string ).
 */

int fpattern_isvalid (LPCTSTR pat)
{
  int len;

  /* Check args */
  if (pat == NULL)
    return (FALSE);

  /* Verify that the pattern is valid */
  for (len = 0; pat[len] != _T('\0'); len++)
    {
      switch (pat[len])
        {
        case FPAT_SET_L:
          /* Char set */
          len++;
          if (pat[len] == FPAT_SET_NOT)
            len++;              /* Set negation */

          while (pat[len] != FPAT_SET_R)
            {
              if (pat[len] == QUOTE)
                len++;          /* Quoted char */
              if (pat[len] == _T('\0'))
                return (FALSE); /* Missing closing bracket */
              len++;

              if (pat[len] == FPAT_SET_THRU)
                {
                  /* Char range */
                  len++;
                  if (pat[len] == QUOTE)
                    len++;      /* Quoted char */
                  if (pat[len] == _T('\0'))
                    return (FALSE);     /* Missing closing bracket */
                  len++;
                }

              if (pat[len] == _T('\0'))
                return (FALSE); /* Missing closing bracket */
            }
          break;

        case QUOTE:
          /* Quoted char */
          len++;
          if (pat[len] == _T('\0'))
            return (FALSE);     /* Missing quoted char */
          break;

        case FPAT_NOT:
          /* Negated pattern */
          len++;
          if (pat[len] == _T('\0'))
            return (FALSE);     /* Missing subpattern */
          break;

        default:
          /* Valid character */
          break;
        }
    }

  return (TRUE);
}


/*-----------------------------------------------------------------------------
 * fpattern_submatch()
 *  Attempts to match subpattern 'pat' to subfilename 'fname'.
 *
 * Returns
 *  1 ( true ) if the subfilename matches, otherwise 0 ( false ).
 *
 * Caveats
 *  This does not assume that 'pat' is well-formed.
 *
 *  If 'pat' is empty ( "" ), the only filename it matches is the empty ( "" )
 *  string.
 *
 *  Some non-empty patterns ( e.g., "" ) will match an empty filename ( "" ).
 */

static int
fpattern_submatch (LPCTSTR pat, LPCTSTR fname)
{
  int fch;
  int pch;
  int i;
  int yes, match;
  int lo, hi;

  /* Attempt to match subpattern against subfilename */
  while (*pat != _T('\0'))
    {
      fch = *fname;
      pch = *pat;
      pat++;

      switch (pch)
        {
        case FPAT_ANY:
          /* Match a single char */
#if DELIM
          if (fch == DEL || fch == DEL2 || fch == _T('\0'))
            return (FALSE);
#else
          if (fch == _T('\0'))
            return (FALSE);
#endif
          fname++;
          break;

        case FPAT_CLOS:
          /* Match zero or more chars */
          i = 0;
#if DELIM
          while (fname[i] != _T('\0') &&
                fname[i] != DEL && fname[i] != DEL2)
            i++;
#else
          while (fname[i] != _T('\0'))
            i++;
#endif
          while (i >= 0)
            {
              if (fpattern_submatch (pat, fname + i))
                return (TRUE);
              i--;
            }
          return (FALSE);

        case SUB:
          /* Match zero or more chars */
          i = 0;
          while (fname[i] != _T('\0') &&
#if DELIM
                fname[i] != DEL && fname[i] != DEL2 &&
#endif
                fname[i] != _T('.'))
            i++;
          while (i >= 0)
            {
              if (fpattern_submatch (pat, fname + i))
                return (TRUE);
              i--;
            }
          return (FALSE);

        case QUOTE:
          /* Match a quoted char */
          pch = *pat;
          if (lowercase (fch) != lowercase (pch) || pch == _T('\0'))
            return (FALSE);
          fname++;
          pat++;
          break;

        case FPAT_SET_L:
          /* Match char set/range */
          yes = TRUE;
          if (*pat == FPAT_SET_NOT)
            {
              pat++;
              yes = FALSE;      /* Set negation */
            }

          /* Look for [ s ], [ - ], [ abc ], [ a-c ] */
          match = !yes;
          while (*pat != FPAT_SET_R && *pat != _T('\0'))
            {
              if (*pat == QUOTE)
                pat++;          /* Quoted char */

              if (*pat == _T('\0'))
                break;
              lo = *pat++;
              hi = lo;

              if (*pat == FPAT_SET_THRU)
                {
                  /* Range */
                  pat++;

                  if (*pat == QUOTE)
                    pat++;      /* Quoted char */

                  if (*pat == _T('\0'))
                    break;
                  hi = *pat++;
                }

              if (*pat == _T('\0'))
                break;

              /* Compare character to set range */
              if (lowercase (fch) >= lowercase (lo) &&
                    lowercase (fch) <= lowercase (hi))
                match = yes;
            }

          if (!match)
            return (FALSE);

          if (*pat == _T('\0'))
            return (FALSE);     /* Missing closing bracket */

          fname++;
          pat++;
          break;

        case FPAT_NOT:
          /* Match only if rest of pattern does not match */
          if (*pat == _T('\0'))
            return (FALSE);     /* Missing subpattern */
          i = fpattern_submatch (pat, fname);
          return !i;

#if DELIM
        case DEL:
#if DEL2 != DEL
        case DEL2:
#endif
          /* Match path delimiter char */
          if (fch != DEL && fch != DEL2)
            return (FALSE);
          fname++;
          break;
#endif

        default:
          /* Match a ( non-null ) char exactly */
          if (lowercase (fch) != lowercase (pch))
            return (FALSE);
          fname++;
          break;
        }
    }

  /* Check for complete match */
  if (*fname != _T('\0'))
    return (FALSE);

  /* Successful match */
  return (TRUE);
}


/*-----------------------------------------------------------------------------
 * fpattern_match()
 *  Attempts to match pattern 'pat' to filename 'fname'.
 *
 * Returns
 *  1 ( true ) if the filename matches, otherwise 0 ( false ).
 *
 * Caveats
 *  If 'fname' is null, zero ( false ) is returned.
 *
 *  If 'pat' is null, zero ( false ) is returned.
 *
 *  If 'pat' is empty ( "" ), the only filename it matches is the empty
 *  string ( "" ).
 *
 *  If 'fname' is empty, the only pattern that will match it is the empty
 *  string ( "" ).
 *
 *  If 'pat' is not a well-formed pattern, zero ( false ) is returned.
 *
 *  Upper and lower case letters are treated the same ; alphabetic
 *  characters are converted to lower case before matching occurs.
 *  Conversion to lower case is dependent upon the current locale setting.
 */

int
fpattern_match (LPCTSTR pat, LPCTSTR fname)
{
  int rc;

  /* Check args */
  if (fname == NULL)
    return (FALSE);

  if (pat == NULL)
    return (FALSE);

  /* Verify that the pattern is valid, and get its length */
  if (!fpattern_isvalid (pat))
    return (FALSE);

  /* Attempt to match pattern against filename */
  if (fname[0] == _T('\0'))
    return (pat[0] == _T('\0'));    /* Special case */
  rc = fpattern_submatch (pat, fname);

  return (rc);
}


/*-----------------------------------------------------------------------------
 * fpattern_matchn()
 *  Attempts to match pattern 'pat' to filename 'fname'.
 *  This operates like fpattern_match() except that it does not verify that
 *  pattern 'pat' is well-formed, assuming that it has been checked by a
 *  prior call to fpattern_isvalid().
 *
 * Returns
 *  1 ( true ) if the filename matches, otherwise 0 ( false ).
 *
 * Caveats
 *  If 'fname' is null, zero ( false ) is returned.
 *
 *  If 'pat' is null, zero ( false ) is returned.
 *
 *  If 'pat' is empty ( "" ), the only filename it matches is the empty ( "" )
 *  string.
 *
 *  If 'pat' is not a well-formed pattern, unpredictable results may occur.
 *
 *  Upper and lower case letters are treated the same ; alphabetic
 *  characters are converted to lower case before matching occurs.
 *  Conversion to lower case is dependent upon the current locale setting.
 *
 * See also
 *  fpattern_match().
 */

int
fpattern_matchn (LPCTSTR pat, LPCTSTR fname)
{
  int rc;

  /* Check args */
  if (fname == NULL)
    return (FALSE);

  if (pat == NULL)
    return (FALSE);

  /* Assume that pattern is well-formed */

  /* Attempt to match pattern against filename */
  rc = fpattern_submatch (pat, fname);

  return (rc);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久久久久院品网| 青青草91视频| 精品国产伦一区二区三区观看方式| 欧美亚洲国产一区二区三区| 99久久99久久精品国产片果冻| 国产风韵犹存在线视精品| 国产精品99久久久久久有的能看| 国内精品视频666| 国产一区二区三区最好精华液| 久久99久久精品欧美| 九九在线精品视频| 激情图区综合网| 国产精品77777竹菊影视小说| 风间由美一区二区三区在线观看| 国产91在线看| 99re在线视频这里只有精品| 一本色道a无线码一区v| 在线观看三级视频欧美| 884aa四虎影成人精品一区| 欧美一级淫片007| 国产欧美日韩在线| 专区另类欧美日韩| 香蕉久久一区二区不卡无毒影院| 视频一区中文字幕| 国产成人精品三级麻豆| 91色在线porny| 欧美一区二区国产| 国产人成一区二区三区影院| 亚洲免费伊人电影| 日韩国产精品久久| 国产毛片精品视频| 欧美日韩一区二区在线观看| 日韩免费看网站| 国产精品久久久久婷婷| 日韩av一二三| 色综合久久久久| 精品剧情在线观看| 一区二区三区久久久| 久久精品国产精品亚洲精品| 95精品视频在线| 欧美xxxx老人做受| 一区二区激情视频| 国产成人av在线影院| 欧美三级中文字| 国产精品不卡一区| 精品一区二区日韩| 欧美专区日韩专区| 欧美激情综合五月色丁香小说| 亚洲大型综合色站| 不卡的电视剧免费网站有什么| 91精品国产欧美日韩| 亚洲男人的天堂在线观看| 国产一区二区精品久久| 欧美性大战久久| 国产女同性恋一区二区| 日韩精品免费专区| 在线精品国精品国产尤物884a| 国产午夜亚洲精品午夜鲁丝片| 日韩成人dvd| 欧美蜜桃一区二区三区| 亚洲三级在线看| 国产成人一级电影| 精品国产免费人成电影在线观看四季| 亚洲第四色夜色| 欧美亚洲国产一区二区三区va| 国产精品夫妻自拍| 成人av在线电影| 国产精品免费视频观看| 成人网页在线观看| 久久奇米777| 国产一区二区三区精品欧美日韩一区二区三区 | 日本高清不卡视频| 国产精品毛片无遮挡高清| 国产呦精品一区二区三区网站| 91精品久久久久久蜜臀| 日本不卡的三区四区五区| 欧美日韩夫妻久久| 日韩中文欧美在线| 欧美精三区欧美精三区| 日av在线不卡| 日韩欧美一级二级三级久久久| 免费人成网站在线观看欧美高清| 国产成人精品免费视频网站| 精品国产乱码久久久久久浪潮 | 国产一区二区三区黄视频 | 国产日韩综合av| 国产一区二区三区香蕉| 久久久久久久久久久久久夜| 国产乱码精品一品二品| 中文字幕久久午夜不卡| 91在线精品秘密一区二区| 亚洲精品中文在线影院| 欧美三级三级三级| 日韩国产高清在线| 精品久久一区二区| 国产福利91精品| 亚洲免费观看高清完整版在线观看熊| 99久久免费视频.com| 亚洲成人av电影| 欧美大片一区二区三区| 成人激情午夜影院| 亚洲一区免费视频| 日韩久久久精品| 99re8在线精品视频免费播放| 亚洲一区二区三区四区在线观看| 91精品国产乱码| 顶级嫩模精品视频在线看| 亚洲精选一二三| 欧美一区二区播放| 99在线热播精品免费| 日本欧美加勒比视频| 日本一区二区三区在线观看| 日本高清不卡在线观看| 国模冰冰炮一区二区| 亚洲免费在线电影| 久久亚洲综合av| 欧美日韩第一区日日骚| 国产99精品国产| 日韩成人伦理电影在线观看| 国产精品福利一区| 欧美mv日韩mv国产网站app| 一本一本久久a久久精品综合麻豆| 欧美a级理论片| 一区二区三区日韩在线观看| 久久午夜国产精品| 3atv一区二区三区| 在线观看中文字幕不卡| 成人爱爱电影网址| 轻轻草成人在线| 一区二区在线观看免费视频播放| 欧美v国产在线一区二区三区| 色综合天天综合| 国产精品一区二区无线| 日本伊人色综合网| 亚洲国产精品视频| 亚洲最大成人综合| 亚洲视频每日更新| 中文字幕av一区二区三区免费看| 在线不卡免费欧美| 欧美亚洲一区二区在线观看| 99久久伊人网影院| 国产成人精品亚洲777人妖 | 成人av电影在线观看| 蜜桃一区二区三区在线| 亚洲一二三四区| 一区二区成人在线视频| 国产精品国产三级国产普通话蜜臀| 久久一区二区视频| 久久亚洲综合av| 国产目拍亚洲精品99久久精品| 久久无码av三级| 欧美经典一区二区| 国产无一区二区| 国产欧美日韩另类视频免费观看| 精品国产1区2区3区| 精品久久久久久无| 欧美成人伊人久久综合网| 欧美成人一区二区三区在线观看| 日韩欧美高清一区| 精品美女被调教视频大全网站| 精品国产乱码久久久久久久久| 日韩欧美综合在线| 欧美mv日韩mv亚洲| 国产视频不卡一区| 成人免费在线视频| 亚洲主播在线播放| 日本欧美大码aⅴ在线播放| 另类成人小视频在线| 国产乱码精品一区二区三区五月婷 | 欧美国产日本视频| 中文字幕亚洲在| 亚洲国产一区二区a毛片| 日韩高清一区二区| 国内精品写真在线观看 | 亚洲色大成网站www久久九九| 自拍偷拍国产亚洲| 亚洲123区在线观看| 老司机精品视频线观看86| 国产一区二区久久| 色婷婷综合激情| 欧美美女一区二区在线观看| 精品卡一卡二卡三卡四在线| 国产精品婷婷午夜在线观看| 亚洲精品中文字幕乱码三区| 日韩和欧美一区二区三区| 国产福利不卡视频| 欧美特级限制片免费在线观看| 精品免费国产一区二区三区四区| 国产欧美日韩不卡免费| 一区二区三区精品在线观看| 久久精品国产亚洲aⅴ| av亚洲精华国产精华| 在线视频国内自拍亚洲视频| 日韩欧美久久久| 亚洲免费资源在线播放| 国产制服丝袜一区| 欧美系列在线观看| 国产丝袜美腿一区二区三区| 亚洲国产日韩精品| 懂色av一区二区三区蜜臀|