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

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

?? regx.c

?? C語言高級實例解析的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:


#include "tdestr.h"
#include "common.h"
#include "tdefunc.h"
#include "define.h"



#define CNODE           0
#define NNODE           1

#define SCAN            -1

#define STRAIGHT_ASCII  0
#define IGNORE_ASCII    1
#define WILD            2
#define BOL             3
#define EOL             4
#define CLASS           5
#define NOTCLASS        6
#define WHITESPACE      7
#define ALPHA           8
#define UPPER           9
#define LOWER           10
#define ALPHANUM        11
#define DECIMAL         12
#define HEX             13
#define BOW             14
#define EOW             15



#define START           0
#define ACCEPT          1
#define OR_NODE         2
#define JUXTA           3
#define CLOSURE         4
#define ZERO_OR_ONE     5


int  lookahead;
int  regx_rc;
int  reg_len;
int  parser_state;
char class_bits[32];
int  bit[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
int  c1;
int  c2;
int  ttype;
int  regx_error_line;

NFA_TYPE  *nfa_pointer;

int  nfa_status;
int  search_len;
int  search_col;
text_ptr search_string;

int  queued_states[REGX_SIZE+2];
int  deque[REGX_SIZE*2];
int  dq_head;
int  dq_tail;
int  stacked_node_count;
int  reset_count;



int  find_regx( WINDOW *window )
{
int  direction;
int  new_string;
char pattern[MAX_COLS];  
long found_line;
long bin_offset;
line_list_ptr ll;
register WINDOW *win;  
int  rc;
int  old_rcol;
int  rcol;

   switch (g_status.command) {
      case FindRegX :
         new_string = TRUE;
         direction  = FORWARD;
         break;
      case RepeatFindRegX :
         new_string =  regx.search_defined != OK ? TRUE : FALSE;
         direction  = FORWARD;
         break;
      case RepeatFindRegXBackward :
         new_string =  regx.search_defined != OK ? TRUE : FALSE;
         direction  = BACKWARD;
         break;
      default :
         new_string = 0;
         direction  = 0;
         assert( FALSE );
         break;
   }

   win = window;
   entab_linebuff( );
   if (un_copy_line( win->ll, win, TRUE ) == ERROR)
      return( ERROR );

   regx_error_line = win->bottom_line;

  
   rc = OK;
   if (new_string == TRUE) {
      *pattern = '\0';
      if (regx.search_defined == OK) {

         assert( strlen( (char *)regx.pattern ) < MAX_COLS );

         strcpy( pattern, (char *)regx.pattern );
      }

     
      if (get_name( reg1, win->bottom_line, pattern,
                    g_display.message_color ) != OK  ||  *pattern == '\0')
         return( ERROR );
      regx.search_defined = OK;

      assert( strlen( pattern ) < MAX_COLS );

      strcpy( (char *)regx.pattern, pattern );
      rc = build_nfa( );
      if (rc == ERROR)
         regx.search_defined = ERROR;
   }

   if (regx.search_defined == OK) {
      old_rcol = win->rcol;
      if (mode.inflate_tabs)
         win->rcol = entab_adjust_rcol( win->ll->line, win->ll->len, win->rcol);
      update_line( win );
      show_search_message( SEARCHING, g_display.diag_color );
      bin_offset = win->bin_offset;
      if (direction == FORWARD) {
         if ((ll = forward_regx_search( win, &found_line, &rcol )) != NULL) {
            if (g_status.wrapped && g_status.macro_executing)
               rc = ask_wrap_replace( win, &new_string );
            if (rc == OK)
               find_adjust( win, ll, found_line, rcol );
            else
               win->bin_offset = bin_offset;
         }
      } else {
         if ((ll = backward_regx_search( win, &found_line, &rcol )) != NULL) {
            if (g_status.wrapped && g_status.macro_executing)
               rc = ask_wrap_replace( win, &new_string );
            if (rc == OK)
               find_adjust( win, ll, found_line, rcol );
            else
               win->bin_offset = bin_offset;
         }
      }
      if (g_status.wrapped)
         show_search_message( WRAPPED, g_display.diag_color );
      else {
         if (nfa_status == OK)
            show_search_message( CLR_SEARCH, g_display.mode_color );
         else
            g_status.wrapped = TRUE;
      }
      if (ll == NULL) {
      
         if (mode.inflate_tabs)
            win->rcol = old_rcol;
         combine_strings( pattern, find5a, (char *)regx.pattern, find5b );
         error( WARNING, win->bottom_line, pattern );
         rc = ERROR;
      }
      show_curl_line( win );
      make_ruler( win );
      show_ruler( win );
   } else {
     
      error( WARNING, win->bottom_line, find6 );
      rc = ERROR;
   }
   return( rc );
}



line_list_ptr forward_regx_search( WINDOW *window, long *rline, int *rcol )
{
register int len;
int  i;
int  end;
register WINDOW *win;  
line_list_ptr ll;

  
   win  = window;
   *rline = win->rline;
   i = win->rcol + 1;
   ll = win->ll;
   len = ll->len;
   if (i > len  &&  len != EOF) {
      ll = ll->next;
      ++*rline;
      i = 0;
   }
   if (i < 0)
      i = 0;

   *rcol = i;
   ll = regx_search_forward( ll, rline, rcol );

   if (ll == NULL) {

      end = 0;
      if (win->ll->next != NULL) {
         end = win->ll->next->len;
         win->ll->next->len = EOF;
      }

     
      g_status.wrapped = TRUE;

      *rcol = 0;
      *rline = 1L;
      ll = regx_search_forward( win->file_info->line_list, rline, rcol );

      if (ll == win->ll  &&  *rcol >= win->rcol)
         ll = NULL;

      if (win->ll->next != NULL)
         win->ll->next->len = end;
   }
   flush_keyboard( );

   if (ll != NULL)
      bin_offset_adjust( win, *rline );
   return( ll );
}



line_list_ptr regx_search_forward( line_list_ptr ll, long *rline, int  *col )
{
   if (ll->len == EOF)
      return( NULL );
   else {
      switch (g_status.command) {
         case DefineRegXGrep  :
         case RepeatGrep :
            nfa_pointer = &sas_nfa;
            stacked_node_count = sas_regx.node_count;
            break;
         case FindRegX  :
         case RepeatFindRegX :
            nfa_pointer = &nfa;
            stacked_node_count = regx.node_count;
            break;
         default :
            assert( FALSE );
            break;
      }
      nfa_status = OK;
      search_string = ll->line;
      search_len = ll->len;
      search_col = *col;
      reset_count = stacked_node_count * sizeof(int);
      for (; !g_status.control_break;) {
         for (; search_col <= search_len; search_col++) {
            if (nfa_match( ) != ERROR) {
               *col = search_col;
               return( ll );
            }
         }
         ++*rline;
         ll = ll->next;
         search_string = ll->line;
         if (ll->len == EOF)
            return( NULL );
         search_len = ll->len;
         search_col = 0;
      }
      return( NULL );
   }
}



line_list_ptr backward_regx_search( WINDOW *window, long *rline, int *rcol )
{
int  i;
int  len;
int  end;
register WINDOW *win;  
line_list_ptr ll;

   win  = window;
   *rline = win->rline;

 
   if (win->ll->len != EOF) {
      ll = win->ll;
      i  = win->rcol - 1;
      len = ll->len;
      if (i >= len)
         i = len - 1;
   } else {
      ll = win->ll->prev;
      --*rline;
      i = 0;
      if (ll != NULL)
         i = ll->len - 1;
   }
   *rcol = i;
   ll = regx_search_backward( ll, rline, rcol );

   if (ll == NULL  &&  win->rline <= win->file_info->length) {

      end = 0;
      if (win->ll->prev != NULL) {
         end = win->ll->prev->len;
         win->ll->prev->len = EOF;
      }

      
      g_status.wrapped = TRUE;
      ll = win->file_info->line_list_end;
      if (ll->prev != NULL)
         *rcol = ll->prev->len;
      else
        *rcol = 0;
      *rline = win->file_info->length;
      ll = regx_search_backward( ll->prev, rline, rcol );

      if (ll == win->ll  &&  *rcol <= win->rcol)
         ll = NULL;

      if (win->ll->prev != NULL)
         win->ll->prev->len = end;
   }
   flush_keyboard( );

   if (ll != NULL)
      bin_offset_adjust( win, *rline );
   return( ll );
}



line_list_ptr regx_search_backward( line_list_ptr ll, long *rline, int *col )
{
   if (ll == NULL)
      return( NULL );
   if (ll->len == EOF)
      return( NULL );
   else {
      nfa_pointer = &nfa;
      stacked_node_count = regx.node_count;

      search_string = ll->line;
      search_len = ll->len;
      search_col = *col;
      reset_count = stacked_node_count * sizeof(int);
      while (!g_status.control_break) {
         for (; search_col >= 0; search_col--) {
            if (nfa_match( ) != ERROR) {
               *col = search_col;
               return( ll );
            }
         }
         --*rline;
         ll = ll->prev;
         if (ll == NULL)
            return( NULL );
         if (ll->len == EOF)
            return( NULL );
         search_string = ll->line;
         search_col = search_len = ll->len;
      }
      return( NULL );
   }
}





int  nfa_match( void )
{
register int c;
int  state;
int  j;
int  n1;
int  rc;

   j = search_col;
   c  =  j < search_len  ?  search_string[j]  :  EOF;
   state = nfa_pointer->next1[0];
   dq_head = 0;
   dq_tail = 0;
   memset( queued_states, 0, reset_count );
   put_dq( SCAN );

   while (state) {
      if (state == SCAN) {
         memset( queued_states, 0, reset_count );
         j++;
         put_dq( SCAN );
         c  =  j < search_len  ?  search_string[j]  :  EOF;
      } else if (nfa_pointer->node_type[state] == NNODE) {
         n1 = nfa_pointer->next1[state];
         rc = OK;
         switch (nfa_pointer->term_type[state]) {
            case STRAIGHT_ASCII :
               if (nfa_pointer->c[state] == c)
                  rc = put_dq( n1 );
               break;
            case IGNORE_ASCII   :
               if (nfa_pointer->c[state] == tolower( c ))
                  rc = put_dq( n1 );
               break;
            case WILD           :
               if (j < search_len)
                  rc = put_dq( n1 );
               break;
            case BOL            :
               if (j == 0) {
                  rc = put_dq( n1 );
                  if (deque[dq_tail] == SCAN)
                     --j;
               }
               break;
            case EOL            :
               if (j == search_len) {
                  rc = put_dq( n1 );
                  if (deque[dq_tail] == SCAN)
                     --j;
               }
               break;
            case CLASS          :
               if (c != EOF  &&  nfa_pointer->class[state][c/8] & bit[c%8])
                  rc = put_dq( n1 );
               break;
            case NOTCLASS       :
               if (c != EOF  &&  !(nfa_pointer->class[state][c/8] & bit[c%8]))
                  rc = put_dq( n1 );
               break;
            case WHITESPACE     :
               if (c == ' '  ||  c == '\t')
                  rc = put_dq( n1 );
               break;
            case ALPHA          :
               if (c != EOF  &&  isalpha( c ))
                  rc = put_dq( n1 );
               break;
            case UPPER          :
               if (c != EOF  &&  isupper( c ))
                  rc = put_dq( n1 );
               break;
            case LOWER          :
               if (c != EOF  &&  islower( c ))
                  rc = put_dq( n1 );
               break;
            case ALPHANUM       :
               if (c != EOF  &&  isalnum( c ))
                  rc = put_dq( n1 );
               break;
            case DECIMAL        :
               if (c != EOF  &&  isdigit( c ))
                  rc = put_dq( n1 );
               break;
            case HEX            :
               if (c != EOF  &&  isxdigit( c ))
                  rc = put_dq( n1 );
               break;
            case BOW            :
               if (c != EOF) {
                  if (!myiswhitespc( c )) {
                     if (j == 0) {
                        rc = put_dq( n1 );
                        if (deque[dq_tail] == SCAN)
                           --j;
                     } else if (j > 0) {
                        if (myiswhitespc( search_string[j-1] )) {
                           rc = put_dq( n1 );
                           if (deque[dq_tail] == SCAN)
                              --j;
                        }
                     }
                  }
               }
               break;
            case EOW            :
               if (c == EOF) {
                  if (search_len > 0) {
                     if (!myiswhitespc( search_string[search_len-1] )) {
                        rc = put_dq( n1 );
                        if (deque[dq_tail] == SCAN)
                           --j;
                     }
                  }
               } else {
                  if (myiswhitespc( c )  &&  j > 0) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色呦呦国产精品| 国产精品一区二区久激情瑜伽| 97久久超碰国产精品| 国产精品进线69影院| 91丨九色丨蝌蚪丨老版| 亚洲另类春色校园小说| 欧美日韩aaaaa| 韩国精品久久久| 国产精品久久久久影院| 99久久久精品| 日韩精品国产精品| ww久久中文字幕| 99riav一区二区三区| 亚洲 欧美综合在线网络| 精品剧情v国产在线观看在线| 国产69精品一区二区亚洲孕妇| 中文字幕一区不卡| 中文字幕一区在线观看| 91福利视频网站| 久久国产精品一区二区| 国产农村妇女精品| 欧美日韩中文国产| 国产精品18久久久久久vr| 一区二区三区中文字幕在线观看| 欧美丰满美乳xxx高潮www| 国产麻豆视频精品| 亚洲午夜视频在线| 久久精品亚洲一区二区三区浴池| 91久久奴性调教| 精东粉嫩av免费一区二区三区 | 欧美亚洲禁片免费| 美女免费视频一区| 成人欧美一区二区三区白人| 欧美一二区视频| 色综合久久88色综合天天6| 美女在线视频一区| 一级女性全黄久久生活片免费| 精品美女一区二区| 欧美午夜一区二区三区 | 成人综合婷婷国产精品久久| 天天影视网天天综合色在线播放| 国产精品国产三级国产| 欧美一区二区三区免费在线看| av色综合久久天堂av综合| 久久se这里有精品| 香蕉加勒比综合久久| 亚洲嫩草精品久久| 久久久一区二区| 欧美一区二区三区系列电影| 99久久婷婷国产综合精品电影| 久久电影网站中文字幕| 亚洲最色的网站| 中文字幕一区二区视频| 欧美精品一区二区在线播放| 欧美精品在线观看播放| 在线观看网站黄不卡| 国产成人在线色| 国产一区二区精品久久| 人人狠狠综合久久亚洲| 亚洲一区二区欧美| 亚洲精品国产精品乱码不99| 中文字幕中文字幕一区| 秋霞电影一区二区| 亚洲激情自拍视频| 综合欧美一区二区三区| 国产精品美女久久久久av爽李琼| 久久亚洲综合av| 精品久久久久久久久久久院品网| 欧美日韩在线播放三区四区| 91美女片黄在线观看| 波多野结衣中文字幕一区| 国产成人久久精品77777最新版本| 精品亚洲国内自在自线福利| 激情图片小说一区| 美女高潮久久久| 久热成人在线视频| 国产一区二区精品久久| 国产传媒久久文化传媒| 国产成a人无v码亚洲福利| 国产成人在线观看免费网站| 91在线观看免费视频| 亚洲欧美日韩国产一区二区三区| 亚洲欧美综合网| 亚洲国产精品一区二区久久恐怖片 | 亚洲精品日韩专区silk| 一区二区三区免费观看| 亚洲18女电影在线观看| 美女脱光内衣内裤视频久久影院| 日本va欧美va瓶| 久久国产精品一区二区| 成人午夜在线播放| 91蜜桃传媒精品久久久一区二区| 色综合久久88色综合天天| 欧美午夜精品一区二区三区| 在线播放国产精品二区一二区四区 | 亚洲高清免费在线| 91久久精品日日躁夜夜躁欧美| 欧美在线视频全部完| 69p69国产精品| 久久综合久久鬼色中文字| 国产精品免费视频网站| |精品福利一区二区三区| 亚洲第一主播视频| 国产乱国产乱300精品| 99热在这里有精品免费| 欧美亚洲国产一卡| 久久综合久久综合久久综合| 亚洲精品欧美激情| 蜜桃视频第一区免费观看| 成人激情开心网| 欧美日韩国产免费一区二区 | 国产精品午夜电影| 一区二区在线观看视频| 免费的国产精品| 91在线视频播放| 欧美一区二区三区视频| 国产精品女主播av| 免费高清不卡av| 97se亚洲国产综合在线| 日韩精品中文字幕一区二区三区 | 亚洲va韩国va欧美va| 国产精选一区二区三区| 欧美在线视频不卡| 中文字幕不卡在线播放| 视频一区二区三区在线| 成人毛片老司机大片| 日韩一区二区三区三四区视频在线观看| 国产精品久久久久一区二区三区| 视频一区欧美日韩| 色呦呦日韩精品| 欧美经典一区二区| 免费观看30秒视频久久| 欧美无人高清视频在线观看| 国产精品嫩草99a| 国产另类ts人妖一区二区| 欧美日韩亚洲综合| 亚洲欧美激情小说另类| 成人网在线播放| 日韩女优av电影| 日日夜夜免费精品视频| 欧美羞羞免费网站| 中文字幕中文字幕在线一区| 国产精品一区二区三区乱码| 日韩午夜电影在线观看| 亚洲成人在线网站| 91久久精品一区二区三区| 中文字幕一区二区在线播放| 国产成人免费av在线| 精品国产网站在线观看| 喷水一区二区三区| 5858s免费视频成人| 亚洲一区二区美女| 在线免费观看日本一区| 亚洲欧美福利一区二区| 不卡一二三区首页| 国产精品女上位| 国产成人精品影院| 亚洲精品一区二区三区福利| 美国十次了思思久久精品导航| 欧美日韩一区成人| 亚洲电影在线免费观看| 一本久道久久综合中文字幕| 成人免费在线观看入口| av一二三不卡影片| 1区2区3区国产精品| 色综合天天性综合| 亚洲人123区| 在线观看国产一区二区| 亚洲五码中文字幕| 91精品啪在线观看国产60岁| 麻豆久久久久久| 亚洲精品在线观看网站| 国产成人精品免费在线| 国产精品美女久久久久久久 | 欧美日韩一区国产| 午夜精品福利在线| 91精品欧美综合在线观看最新| 青青草国产成人av片免费| 欧美sm美女调教| 成人免费视频网站在线观看| 综合久久给合久久狠狠狠97色| 一本到不卡精品视频在线观看| 亚洲免费视频中文字幕| 欧美午夜片在线观看| 美女视频一区二区三区| 久久精品一区二区三区不卡| 成人免费看的视频| 亚洲乱码国产乱码精品精的特点| 欧美私人免费视频| 九色|91porny| 亚洲三级免费电影| 91精品国产色综合久久不卡电影 | 国产精品午夜在线观看| 色999日韩国产欧美一区二区| 亚洲成人福利片| 欧美videos中文字幕| av一区二区三区在线| 日韩国产在线一| 日本一区免费视频| 欧美在线观看视频在线|