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

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

?? utils.c

?? 《c語言高級實例解析》光盤所附源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:


#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)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色综合久久| 国产福利一区二区三区视频在线| 欧美又粗又大又爽| 99在线热播精品免费| 精品视频在线免费| 中文字幕一区二区三区四区不卡| 亚洲视频免费看| 日日摸夜夜添夜夜添精品视频| 国产色产综合产在线视频| 日韩欧美在线影院| 亚洲欧洲精品天堂一级 | 久久不见久久见免费视频1| 另类小说欧美激情| 男男gaygay亚洲| 麻豆精品视频在线观看免费| 麻豆一区二区99久久久久| 视频一区视频二区在线观看| 日本亚洲免费观看| 久久成人精品无人区| 久久国产夜色精品鲁鲁99| 亚洲欧洲三级电影| 日韩美女在线视频| 国产亚洲午夜高清国产拍精品 | 一本色道久久综合狠狠躁的推荐| 国产日韩欧美亚洲| 美女一区二区视频| 欧美午夜在线一二页| ㊣最新国产の精品bt伙计久久| 国产精品动漫网站| 国产jizzjizz一区二区| 91精品国产色综合久久不卡蜜臀| 日韩欧美色电影| 一级特黄大欧美久久久| 久久69国产一区二区蜜臀| 欧美成人性福生活免费看| 午夜不卡在线视频| 亚洲国产aⅴ天堂久久| 国产欧美一区在线| 久久免费美女视频| 精品成人一区二区| 91福利视频网站| 国产精品 欧美精品| 国产精品一区二区在线观看不卡 | 久久久久久电影| 欧美日韩亚洲丝袜制服| 狠狠色综合播放一区二区| 亚洲男人都懂的| 欧美不卡在线视频| 在线不卡一区二区| 欧美电影一区二区| 色国产综合视频| 日韩专区在线视频| 国产精品不卡视频| 亚洲欧美视频在线观看视频| 欧美大胆人体bbbb| 91精品1区2区| 色域天天综合网| 亚洲午夜三级在线| 日韩一区二区高清| 91精品国产麻豆| 日韩天堂在线观看| 男男gaygay亚洲| 欧美一级欧美三级在线观看| 亚洲最色的网站| 欧美日韩国产一区二区三区地区| 亚洲日本青草视频在线怡红院 | 日本不卡中文字幕| 亚洲第一狼人社区| 日韩电影在线观看电影| 精品女同一区二区| av亚洲精华国产精华精| 日韩av电影天堂| 亚洲国产日产av| 久久精品综合网| 99久久久无码国产精品| 久久综合九色综合97婷婷女人| 婷婷国产v国产偷v亚洲高清| 日韩午夜电影在线观看| 在线亚洲一区二区| 91久久一区二区| 成人深夜在线观看| 麻豆成人91精品二区三区| 亚洲精品视频在线观看免费| 国产午夜精品在线观看| 欧美综合在线视频| 精品午夜一区二区三区在线观看| 亚洲一区二区av电影| 国产欧美日韩不卡| 亚洲欧洲另类国产综合| 亚洲国产裸拍裸体视频在线观看乱了| 全国精品久久少妇| 日韩精品一级中文字幕精品视频免费观看 | 九九**精品视频免费播放| 国产成人亚洲精品青草天美| 欧美精品一区二区三区在线播放| 国内精品免费**视频| 久久影视一区二区| 在线免费观看日韩欧美| 日日摸夜夜添夜夜添亚洲女人| 26uuu精品一区二区三区四区在线| 精品一区二区免费视频| 一区免费观看视频| 在线成人av网站| 日韩高清不卡在线| 91精品国产综合久久香蕉的特点| 综合亚洲深深色噜噜狠狠网站| 国产一级精品在线| 国产精品伦一区二区三级视频| 久草这里只有精品视频| 91精选在线观看| 麻豆国产精品官网| 久久色视频免费观看| 韩国欧美国产1区| 久久久久久电影| 99久久99久久精品免费观看| 欧美一级在线视频| 婷婷久久综合九色国产成人| 九色porny丨国产精品| av在线播放成人| 成人午夜在线免费| 国产高清精品网站| 欧美日韩在线直播| 亚洲天堂福利av| 午夜视频久久久久久| 国内成人免费视频| 国产成人在线网站| 日韩精品中午字幕| 悠悠色在线精品| 国产资源精品在线观看| 欧美美女喷水视频| 自拍偷在线精品自拍偷无码专区| 亚洲欧美国产高清| 成人精品国产免费网站| 日韩精品电影一区亚洲| 一区二区三区免费观看| 欧美一区二区在线免费播放| 国产成人av一区| 国产精品久久久久桃色tv| 99久久久久久99| 日韩高清在线观看| 欧美日韩黄色一区二区| 午夜欧美一区二区三区在线播放| 狠狠久久亚洲欧美| 国产丝袜在线精品| 91视频www| 国内精品国产三级国产a久久| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩在线观看一区二区| 久久精品国产久精国产爱| 久久久久久久久久久久久女国产乱| 国产福利不卡视频| 亚洲卡通动漫在线| 国产精品国产成人国产三级 | 国产精品久99| 一区二区三区在线观看动漫| 日韩一区二区免费在线电影| 中文字幕亚洲不卡| 国产精品456| 国产视频一区二区在线| 天天操天天综合网| 欧美在线视频日韩| 中文字幕亚洲在| 国产精品一区二区无线| 91精品国产欧美日韩| 亚洲欧美一区二区三区久本道91| eeuss鲁片一区二区三区| 久久婷婷国产综合国色天香 | 日韩免费电影一区| 亚洲国产精品av| 夜夜夜精品看看| 国产米奇在线777精品观看| 成人久久18免费网站麻豆| 欧美精品123区| 国产欧美一区二区精品仙草咪| 久久一区二区三区四区| 午夜精品123| 欧美系列在线观看| 亚洲图片欧美激情| 国产真实乱对白精彩久久| 欧美日韩在线精品一区二区三区激情| 国产色91在线| 北条麻妃国产九九精品视频| 在线电影国产精品| 尤物在线观看一区| 国产精品66部| 欧美成人在线直播| 在线观看一区不卡| 国产91精品露脸国语对白| 国产精品久99| 国产一区二区在线看| 在线免费亚洲电影| 中文一区二区在线观看| 国产91丝袜在线观看| 亚洲欧美色图小说| av电影在线观看完整版一区二区| 久久久久国产一区二区三区四区| 91小视频在线| 亚洲国产视频a| 欧美午夜一区二区| 天天综合色天天综合色h|