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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? utils.c

?? 《c語(yǔ)言高級(jí)實(shí)例解析》光盤所附源代碼
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):


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



int  myiswhitespc( int c )
{
   return( c == ' ' || (ispunct( c ) && c != '_') || iscntrl( c ) );
}



void check_virtual_col( WINDOW *window, int rcol, int ccol )
{
register int bcol;
int  start_col;
int  end_col;
file_infos *file;

   file      = window->file_info;
   bcol      = window->bcol;
   start_col = window->start_col;
   end_col   = window->end_col;

 
   if (ccol > end_col) {
 2;  */
      ccol = end_col;
      bcol = rcol - (ccol - start_col);
      file->dirty = LOCAL;
   }

  
   if (ccol < start_col) {
      if (bcol >= (start_col - ccol))
         bcol -= (start_col - ccol);
      ccol = start_col;
      file->dirty = LOCAL;
   }

  
   if (rcol < bcol) {
      ccol = rcol + start_col;
      bcol = 0;
      if (ccol > end_col) {
         bcol = rcol;
         ccol = start_col;
      }
      file->dirty = LOCAL;
   }

  
   if ((ccol - start_col) + bcol != rcol) {
      if (bcol < 0 || bcol > rcol) {
         bcol = rcol;
         file->dirty = LOCAL;
      }
      ccol = rcol - bcol + start_col;
      if (ccol > end_col) {
         bcol = rcol;
         ccol = start_col;
         file->dirty = LOCAL;
      }
   }

  
   if (rcol < 0) {
      rcol = bcol = 0;
      ccol = start_col;
      file->dirty = LOCAL;
   }

   if (rcol >= MAX_LINE_LENGTH) {
      rcol = MAX_LINE_LENGTH - 1;
      bcol = rcol - (ccol - start_col);
   }

   assert( rcol >= 0 );
   assert( rcol < MAX_LINE_LENGTH );
   assert( bcol >= 0 );
   assert( bcol < MAX_LINE_LENGTH );
   assert( ccol >= start_col );
   assert( ccol <= end_col );

   window->bcol = bcol;
   window->ccol = ccol;
   window->rcol = rcol;
}



void copy_line( line_list_ptr ll )
{
register unsigned int len;
text_ptr text_line;

   if (g_status.copied == FALSE  &&  ll->len != EOF) {

      assert( ll != NULL );

      len = ll->len;
      text_line = ll->line;
      g_status.buff_node = ll;

      assert( len < MAX_LINE_LENGTH );

      if (text_line != NULL)
         _fmemcpy( g_status.line_buff, text_line, len );

      g_status.line_buff_len = len;
      g_status.copied = TRUE;
   }
}



int  un_copy_line( line_list_ptr ll, WINDOW *window, int del_trailing )
{
text_ptr p;
size_t len;     
size_t ll_len;  
int  net_change;
int  rc;
char c;
file_infos *file;
WINDOW *wp;

   rc = OK;
   if (mode.do_backups == TRUE)
      rc = backup_file( window );

   if (g_status.copied == TRUE  &&  ll->len != EOF) {

      file = window->file_info;

      if (g_status.command == DeleteLine)
         del_trailing = FALSE;

      if (del_trailing  &&  mode.trailing  &&  file->crlf != BINARY) {
         len = g_status.line_buff_len;
         for (p=(text_ptr)(g_status.line_buff+len); len > 0; len--, p--) {
            c = *(p - 1);
            if (c != ' '  &&  c != '\t')
               break;
            if (!mode.inflate_tabs && c == '\t')
               break;
         }
         g_status.line_buff_len = len;
         file->dirty = GLOBAL;
         if (window->visible == TRUE)
            show_changed_line( window );
      }
      len = g_status.line_buff_len;
      ll_len =  (ll->line == NULL) ? 0 : ll->len;


      assert( len < MAX_LINE_LENGTH );
      assert( ll_len < MAX_LINE_LENGTH );

      net_change = len - ll_len;

      if (ll_len != len  ||  ll->line == NULL) {
         
         p = my_malloc( len, &rc );
         if (rc == ERROR)
            error( WARNING, window->bottom_line, main4 );

        
         if (rc != ERROR  &&  ll->line != NULL)
            my_free( ll->line );
      } else
         p = ll->line;

      if (rc != ERROR) {
         if (len > 0)
            _fmemcpy( p, g_status.line_buff, len );
         ll->line = p;
         ll->len = len;

         if (net_change != 0) {
            for (wp=g_status.window_list; wp != NULL; wp=wp->next) {
               if (wp->file_info == file && wp != window)
                  if (wp->rline > window->rline)
                     wp->bin_offset += net_change;
            }
         }

         file->modified = TRUE;
         show_avail_mem( );
      }
   }
   g_status.copied = FALSE;
   return( rc );
}



int  un_copy_tab_buffer( line_list_ptr ll, WINDOW *window )
{
text_ptr p;
int  len;               
int  net_change;
int  rc;
file_infos *file;
WINDOW *wp;

   rc = OK;
   file = window->file_info;
  
   if (mode.do_backups == TRUE) {
      window->file_info->modified = TRUE;
      rc = backup_file( window );
   }

   len = g_status.tabout_buff_len;

   assert( len >= 0 );
   assert( len < MAX_LINE_LENGTH );
   assert( ll->len >= 0 );
   assert( ll->len < MAX_LINE_LENGTH );

  
   p = my_malloc( len, &rc );
   if (rc == ERROR)
      error( WARNING, window->bottom_line, main4 );

   if (rc == OK) {
      net_change = len - ll->len;

      if (ll->line != NULL)
         my_free( ll->line );
      if (len > 0)
         _fmemcpy( p, g_status.line_buff, len );
      ll->line = p;
      ll->len  = len;

      if (net_change != 0) {
         for (wp=g_status.window_list; wp != NULL; wp=wp->next) {
            if (wp->file_info == file && wp != window)
               if (wp->rline > window->rline)
                  wp->bin_offset += net_change;
         }
      }

      file->modified = TRUE;
   }
   return( rc );
}



void load_undo_buffer( file_infos *file, text_ptr line_to_undo, int len )
{
int  rc;
text_ptr l;
line_list_ptr temp_ll;

   rc = OK;
   if (file->undo_count >= mode.undo_max) {
      --file->undo_count;
      temp_ll = file->undo_bot->prev;
      temp_ll->prev->next = file->undo_bot;
      file->undo_bot->prev = temp_ll->prev;
      if (temp_ll->line != NULL)
         my_free( temp_ll->line );
   } else
      temp_ll = (line_list_ptr)my_malloc( sizeof(line_list_struc), &rc );

   assert( len >= 0 );
   assert( len < MAX_LINE_LENGTH );

   l = my_malloc( len, &rc );

   if (rc == ERROR) {
      if (l != NULL)
         my_free( l );
      if (temp_ll != NULL)
         my_free( temp_ll );
   } else {
      if (len > 0)
         _fmemcpy( l, line_to_undo, len );
      temp_ll->line  = l;
      temp_ll->len   = len;
      temp_ll->dirty = TRUE;

      temp_ll->prev = NULL;
      temp_ll->next = file->undo_top;
      file->undo_top->prev = temp_ll;
      file->undo_top = temp_ll;

      ++file->undo_count;
   }
}



void set_prompt( char *prompt, int line )
{
register int prompt_col;

  
   prompt_col = strlen( prompt );

   assert( prompt_col <= MAX_COLS );

  
   s_output( prompt, line, 0, g_display.message_color );
   eol_clear( prompt_col, line, g_display.message_color );

  
   xygoto( prompt_col, line );
}



int  get_name( char *prompt, int line, char *name, int color )
{
int  col;               
int  c;                 
char *cp;               
char *answer;           
int first = TRUE;       
register int len;       
int  plen;              
int  func;              
int  stop;              
char *p;                
char buffer[MAX_COLS+2];
char line_buff[(MAX_COLS+1)*2]; 
int  normal;
int  local_macro = FALSE;
int  next;
int  regx_help_on;
char **pp;
int  i;

  
   assert( strlen( prompt ) < MAX_COLS );
   assert( strlen( name )   < MAX_COLS );

   strcpy( buffer, prompt );
   plen = strlen( prompt );
   answer = buffer + plen;
   strcpy( answer, name );

   regx_help_on = FALSE;
   len = strlen( answer );
   col = strlen( buffer );
   g_status.prompt_line = line;
   g_status.prompt_col = col;
   cp = answer + len;
   normal = g_display.text_color;
   save_screen_line( 0, line, line_buff );
   s_output( buffer, line, 0, color );
   eol_clear( col, line, normal );
   for (stop = FALSE; stop == FALSE;) {
      if (regx_help_on == TRUE)
         xygoto( -1, -1 );
      else
         xygoto( col, line );
      if (g_status.macro_executing) {
         next = g_status.macro_next;
         g_status.macro_next = macro.strokes[g_status.macro_next].next;
         if (g_status.macro_next != -1) {
            c = macro.strokes[g_status.macro_next].key;
            func = getfunc( c );
            if (func == PlayBack) {
               stop = TRUE;
               g_status.macro_next = next;
            }
         } else {
            c = 0x100;
            func = AbortCommand;
            stop = TRUE;
         }
      } else {
         if (local_macro == FALSE) {
            c = getkey( );
            func = getfunc( c );

           
            if (c == RTURN)
               func = Rturn;
            else if (c == ESC)
               func = AbortCommand;

            if (func == PlayBack) {
               local_macro = TRUE;
               next = macro.first_stroke[ c-256 ];
               c = macro.strokes[next].key;
               func = getfunc( c );
               next = macro.strokes[next].next;
            } else {
               g_status.key_pressed = c;
               record_keys( line );
            }
         } else {
            if (next != -1) {
               c = macro.strokes[next].key;
               next = macro.strokes[next].next;
            } else {
               local_macro = FALSE;
               c = 0x100;
            }
            func = getfunc( c );
         }
      }
      if (c == _F1)
         func = Help;
      if (regx_help_on == TRUE  &&  g_status.current_window != NULL) {
         redraw_screen( g_status.current_window );
         s_output( buffer, line, 0, color );
         eol_clear( col, line, normal );
         s_output( cp, line, col, color );
         regx_help_on = FALSE;
      } else {
         switch (func) {
            case Help :
               if ((g_status.command == FindRegX  ||
                    g_status.command == RepeatFindRegX) &&
                    regx_help_on == FALSE) {
                  regx_help_on = TRUE;
                  for (i=3,pp=regx_help; *pp != NULL; pp++, i++)
                     s_output( *pp, i, 12, g_display.help_color );
               }
               break;
            case ToggleSearchCase :
               mode.search_case = mode.search_case == IGNORE ? MATCH : IGNORE;
               build_boyer_array( );
               show_search_case( );
               break;
            case Rturn       :
            case NextLine    :
            case BegNextLine :
               answer[len] = '\0';
               assert( strlen( answer ) < MAX_COLS );
               strcpy( name, answer );
              
               stop = TRUE;
               break;
            case BackSpace :
             
               if (cp > answer) {
                  for (p=cp-1; p < answer+len; p++) {
                     *p = *(p+1);
                  }
                  --len;
                  --col;
                  --cp;
                  c_output( ' ', plen+len, line, normal );
                  s_output( cp, line, col, color );
                  *(answer + len) = '\0';
               }
               break;
            case DeleteChar :
            
               if (*cp) {
                  for (p=cp; p < answer+len; p++) {
                     *p = *(p+1);
                  }
                  --len;
                  c_output( ' ', plen+len, line, normal );
                  s_output( cp, line, col, color );
                  *(answer + len) = '\0';
               }
               break;
            case DeleteLine :
              
               col = plen;
               cp = answer;
               *cp = '\0';
               len = 0;
               eol_clear( col, line, normal );
               break;
            case AbortCommand :
               stop = TRUE;
               break;
            case CharLeft :
            
               if (cp > answer) {
                  col--;
                  cp--;
               }
               break;
            case CharRight :
              
               if (*cp) {
                  col++;
                  cp++;
                }
                break;
            case BegOfLine :
             
               col = plen;
               cp = answer;
               break;
            case EndOfLine :
             
               col = plen + len;
               cp = answer + len;
               break;
            default :
               if (c < 0x100) {
                
                  if (first) {
                    
                     col = plen;
                     cp = answer;
                     *cp = '\0';
                     len = 0;
                     eol_clear( col, line, normal );
                  }

                 
                  if (col < g_display.ncols-1) {
                     if (*cp == '\0') {
                        ++len;
                        *(answer + len) = '\0';
                     }
                     *cp = (char)c;
                     c_output( c, col, line, color );
                     ++cp;
                     ++col;
                  }
               }
               break;
         }
      }
      first = FALSE;
   }
   restore_screen_line( 0, line, line_buff );
   return( func == AbortCommand ? ERROR : OK );
}



int  get_sort_order( WINDOW *window )
{
register int c;
int  col;
char line_buff[(MAX_COLS+1)*2];         

   save_screen_line( 0, window->bottom_line, line_buff );
  
   s_output( utils4, window->bottom_line, 0, g_display.message_color );
   c = strlen( utils4 );
   eol_clear( c, window->bottom_line, g_display.text_color );
   xygoto( c, window->bottom_line );
   do {
      c = getkey( );
      col = getfunc( c );
      if (c == ESC)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品在线观看| 国产欧美日韩精品在线| 国产成人在线看| 国产精品国产三级国产普通话三级 | 在线亚洲人成电影网站色www| 性做久久久久久免费观看 | 精品蜜桃在线看| 色噜噜狠狠一区二区三区果冻| 国产一区视频导航| 午夜伊人狠狠久久| 亚洲欧美日韩国产手机在线| 久久精品日韩一区二区三区| 51久久夜色精品国产麻豆| 91同城在线观看| 国模少妇一区二区三区| 日韩在线卡一卡二| 亚洲欧美激情在线| 欧美激情在线一区二区| 精品免费视频一区二区| 欧美三级在线看| 色哟哟国产精品免费观看| 成人精品视频一区二区三区尤物| 蜜桃av噜噜一区二区三区小说| 亚洲影视在线播放| 亚洲欧美在线观看| 国产精品久久久久一区二区三区共 | 99精品欧美一区二区蜜桃免费 | 欧美大片一区二区| 欧美日韩亚洲综合一区| 欧美在线不卡视频| 91小视频在线观看| 成人午夜电影网站| 成人一区二区视频| 国产精品一卡二卡| 国产一区二区三区| 国产精品一线二线三线| 久久电影网站中文字幕| 另类小说一区二区三区| 另类欧美日韩国产在线| 久久99精品久久久久久国产越南| 美女一区二区视频| 久久99国产精品免费| 黄色成人免费在线| 国内国产精品久久| 国产麻豆日韩欧美久久| 国产成人午夜99999| 国产99久久久国产精品潘金网站| 国产成人综合在线播放| 国产ts人妖一区二区| av成人动漫在线观看| 色婷婷av一区| 欧美色成人综合| 91精品国产日韩91久久久久久| 日韩午夜在线观看视频| 精品国精品国产尤物美女| 久久久精品人体av艺术| 国产精品国产馆在线真实露脸| 亚洲视频在线观看一区| 亚洲综合色婷婷| 首页亚洲欧美制服丝腿| 免费在线看成人av| 国产高清一区日本| 色婷婷综合久久久中文字幕| 欧美人与性动xxxx| 久久综合丝袜日本网| 成人欧美一区二区三区1314| 一区二区高清视频在线观看| 三级精品在线观看| 久久国产精品色婷婷| 99久久免费国产| 欧美日韩电影在线播放| 久久亚洲综合av| 亚洲人成电影网站色mp4| 视频一区免费在线观看| 国产乱码精品一区二区三区av| 99久久精品免费| 欧美日韩三级一区| 国产亚洲短视频| 亚洲自拍与偷拍| 国内精品国产三级国产a久久| 91色porny| 欧美www视频| 亚洲精品午夜久久久| 久久99精品久久久久久| 91在线观看美女| 日韩免费高清av| 一区二区在线看| 国产在线观看一区二区| 91国产免费观看| 久久蜜桃香蕉精品一区二区三区| 亚洲精品一卡二卡| 国产美女一区二区三区| 欧美日韩一区国产| 中文字幕欧美区| 日韩精品一级中文字幕精品视频免费观看 | 欧美亚洲国产一区二区三区| 精品88久久久久88久久久 | 成人小视频在线| 3d成人h动漫网站入口| 国产精品护士白丝一区av| 老汉av免费一区二区三区| 色欧美片视频在线观看| 国产女同性恋一区二区| 美日韩黄色大片| 欧美日韩国产色站一区二区三区| 亚洲国产成人在线| 狠狠色丁香婷婷综合久久片| 欧美欧美欧美欧美首页| 一区二区三区在线观看国产| 成人免费视频app| 精品精品国产高清一毛片一天堂| 亚洲成人免费视| 91九色最新地址| 国产精品久久久久久亚洲伦| 蜜桃精品在线观看| 欧美久久久久中文字幕| 亚洲一区视频在线| 色综合天天综合| 国产精品网站在线| 国产精品12区| 国产夜色精品一区二区av| 免费成人深夜小野草| 6080亚洲精品一区二区| 亚洲高清不卡在线| 欧美在线观看视频一区二区三区 | 1区2区3区欧美| 成人永久aaa| 日本一区二区三区四区| 狠狠色2019综合网| 欧美精品一区二区三区视频| 蜜桃在线一区二区三区| 欧美一区二区三区男人的天堂| 亚洲成人av福利| 欧美日韩成人综合在线一区二区 | 顶级嫩模精品视频在线看| 久久亚洲精品小早川怜子| 蜜桃av噜噜一区二区三区小说| 欧美一区二区在线免费播放| 蜜桃av一区二区三区| 日韩精品一区二区三区视频在线观看| 日本午夜一区二区| 精品久久久久久久久久久久久久久 | 欧美久久久久久久久中文字幕| 亚洲午夜久久久久中文字幕久| 色偷偷久久人人79超碰人人澡| 亚洲欧美国产77777| 欧美亚一区二区| 日韩电影在线观看一区| 日韩精品一区二区在线| 精品综合免费视频观看| 久久久综合网站| 成人免费看的视频| 亚洲欧洲成人精品av97| 在线观看免费视频综合| 日日欢夜夜爽一区| 日韩欧美国产精品一区| 国产精品1区2区| 亚洲欧洲精品一区二区精品久久久| 97久久精品人人爽人人爽蜜臀 | 视频一区二区三区中文字幕| 欧美一区二区在线免费播放| 国产美女娇喘av呻吟久久| 国产精品蜜臀av| 欧美在线短视频| 精品一区二区三区免费毛片爱| 国产三级久久久| 欧美性大战久久久久久久蜜臀| 日韩精品一卡二卡三卡四卡无卡| 久久影音资源网| 97se亚洲国产综合自在线观| 偷窥少妇高潮呻吟av久久免费| 精品国免费一区二区三区| 99久久精品久久久久久清纯| 日韩极品在线观看| 欧美国产精品久久| 欧美日韩一区二区三区不卡| 精品一区二区三区免费毛片爱 | 尤物在线观看一区| 欧美成人一区二区三区片免费 | 亚洲免费观看在线视频| 欧美久久久久久蜜桃| 成人一区二区三区在线观看| 亚洲成人免费看| 中文字幕电影一区| 91精品国产福利在线观看| 成人理论电影网| 午夜不卡在线视频| 国产女同性恋一区二区| 欧美日本一区二区三区四区| 成人精品视频一区二区三区| 青青国产91久久久久久| 国产精品麻豆网站| 欧美大片拔萝卜| 在线观看av一区| 丁香婷婷综合激情五月色| 舔着乳尖日韩一区| 自拍偷在线精品自拍偷无码专区| 精品欧美一区二区久久| 欧美色男人天堂| 99久久婷婷国产|