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

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

?? macro.c

?? 《c語言高級實例解析》光盤所附源代碼
?? C
字號:


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



int  record_on_off( WINDOW *window )
{
register int next;
int  prev;
int  line;
int  key;
int  func;
char line_buff[(MAX_COLS+2)*2]; 

   mode.record = !mode.record;
   if (mode.record == TRUE) {
      line = window->bottom_line;
      show_avail_strokes( );
      save_screen_line( 0, line, line_buff );
      
      set_prompt( main11, line );

      
      key = getkey( );
      func = getfunc( key );

      
      if (key <= 256 || (func != 0 && func != PlayBack)) {
         
         error( WARNING, line, main12 );
         mode.record = FALSE;
      } else if (g_status.stroke_count == 0) {
        
         error( WARNING, line, main13 );
         mode.record = FALSE;
      } else {

        
         prev = OK;
         if (func == PlayBack) {
            
            set_prompt( main14, line );
            if (get_yn( ) == A_NO) {
               prev = ERROR;
               mode.record = FALSE;
            }
         }
         if (prev == OK) {
            g_status.recording_key = key;
            next = macro.first_stroke[key-256];

            
            if (next != STROKE_LIMIT+1) {
               do {
                  prev = next;
                  next = macro.strokes[next].next;
                  macro.strokes[prev].key  = MAX_KEYS+1;
                  macro.strokes[prev].next = STROKE_LIMIT+1;
                  ++g_status.stroke_count;
               } while (next != -1);
               show_avail_strokes( );
            }

            
            for (next=0; macro.strokes[next].next != STROKE_LIMIT+1;)
               next++;
            macro.first_stroke[key-256] = next;
            macro.strokes[next].key  = -1;
            macro.strokes[next].next = -1;
            key_func.key[key-256] = PlayBack;
           
            s_output( main15, g_display.mode_line, 22,
                      g_display.mode_color | 0x80 );
         }
      }
      restore_screen_line( 0, line, line_buff );
   }

   if (mode.record == FALSE) {
      memset( line_buff, ' ', 36 );
      line_buff[36] = '\0';
      s_output( line_buff, g_display.mode_line, 22, g_display.mode_color );
      show_tab_modes( );
      show_indent_mode( );
      show_sync_mode( );
      show_search_case( );
      show_wordwrap_mode( );

     
      key = g_status.recording_key;
      if (key != 0) {
         next = macro.first_stroke[key-256];
         if (macro.strokes[next].key == -1) {
            macro.strokes[next].key  = MAX_KEYS+1;
            macro.strokes[next].next = STROKE_LIMIT+1;
            macro.first_stroke[key-256] = STROKE_LIMIT+1;
            if (getfunc( key ) == PlayBack)
               key_func.key[key-256] = 0;
         }
      }
      g_status.recording_key = 0;
   }
   return( OK );
}


/*
 * 作用: 把鍵盤命令放到緩存中
 * 參數: line: 要提示顯示的行
 * 注意: 如果next值是-1,表明到了記錄的末尾;
 *       如果next值是STROKE_LIMIT+1表示空間已經用完
 */
void record_keys( int line )
{
register int next;
register int prev;
int  key;
int  func;

   if (mode.record == TRUE) {
      if (g_status.stroke_count == 0)
         /*
          * 宏記錄已經沒有空間記錄更多的操作
          */
         error( WARNING, line, main13 );
      else {
         key = g_status.key_pressed;
         func = getfunc( key );
         if (func != RecordMacro && func != SaveMacro && func != LoadMacro &&
             func != ClearAllMacros) {

            /*
             * 如果next值是-1,表明到了記錄的末尾
             */
            next = macro.first_stroke[g_status.recording_key - 256];
            if (macro.strokes[next].next != STROKE_LIMIT+1) {
               while (macro.strokes[next].next != -1)
                  next = macro.strokes[next].next;
            }
            prev = next;

            /*
             * 找到一個空間來記錄當前的操作
             */
            if (macro.strokes[next].key != -1) {
               for (; next < STROKE_LIMIT &&
                            macro.strokes[next].next != STROKE_LIMIT+1;)
                  next++;
               if (next == STROKE_LIMIT) {
                  for (next=0; next < prev &&
                               macro.strokes[next].next != STROKE_LIMIT+1;)
                     next++;
               }
            }
            if (next == prev && macro.strokes[prev].key != -1)
               /*
                * 記錄緩存沒有記錄
                */
               error( WARNING, line, main13 );
            else {
            /*
             * 如果我們正在記錄第一個宏節點,那么next == prev
             */
               macro.strokes[prev].next = next;
               macro.strokes[next].next = -1;
               macro.strokes[next].key  = key;
               g_status.stroke_count--;
               show_avail_strokes( );
            }
         }
      }
   }
}



void show_avail_strokes( void )
{
char strokes[MAX_COLS];

   s_output( main18, g_display.mode_line, 33, g_display.mode_color );
   itoa( g_status.stroke_count, strokes, 10 );
   s_output( "      ", g_display.mode_line, 51, g_display.mode_color );
   s_output( strokes, g_display.mode_line, 51, g_display.mode_color );
}



int  save_strokes( WINDOW *window )
{
FILE *fp;                       
char name[MAX_COLS+2];          
char line_buff[(MAX_COLS+1)*2]; 
register int rc;
int  prompt_line;
int  fattr;

   name[0] = '\0';
   prompt_line = window->bottom_line;
   save_screen_line( 0, prompt_line, line_buff );
   
   if ((rc = get_name( main19, prompt_line, name,
                 g_display.message_color )) == OK  &&  *name != '\0') {

      
      rc = get_fattr( name, &fattr );
      if (rc == OK) {
         
         set_prompt( main20, prompt_line );
         if (get_yn( ) != A_YES  ||  change_mode( name, prompt_line ) == ERROR)
            rc = ERROR;
      }
      if (rc != ERROR) {
         if ((fp = fopen( name, "wb" )) != NULL) {
            fwrite( &macro.first_stroke[0], sizeof(int), MAX_KEYS, fp );
            fwrite( &macro.strokes[0], sizeof(STROKES), STROKE_LIMIT, fp );
            fclose( fp );
         }
      }
   }
   restore_screen_line( 0, prompt_line, line_buff );
   return( OK );
}



int  load_strokes( WINDOW *window )
{
register FILE *fp;      
char dname[MAX_COLS];   
char stem[MAX_COLS];    
register int rc;

   dname[0] = '\0';
   
   if (get_name( main21, window->bottom_line, dname,
                 g_display.message_color ) == OK  &&  *dname != '\0') {
      if (validate_path( dname, stem ) == OK) {
         rc = list_and_pick( dname, stem, window );

         if (rc == OK) {
            if ((fp = fopen( dname, "rb" )) != NULL && ceh.flag != ERROR) {
               fwrite( &macro.first_stroke[0], sizeof(int), MAX_KEYS, fp );
               fwrite( &macro.strokes[0], sizeof(STROKES), STROKE_LIMIT, fp );
               fclose( fp );
            }
            if (ceh.flag == OK)
               connect_macros( );
         }
      } else
        
         error( WARNING, window->bottom_line, main22 );
   }
   return( OK );
}



int  clear_macros( WINDOW *arg_filler )
{
register int i;

   g_status.stroke_count = STROKE_LIMIT;
   for (i=0; i<STROKE_LIMIT; i++) {
      macro.strokes[i].next = STROKE_LIMIT+1;
      macro.strokes[i].key  = MAX_KEYS+1;
   }
   for (i=0; i<MAX_KEYS; i++) {
      macro.first_stroke[i] = STROKE_LIMIT+1;
      if (key_func.key[i] == PlayBack)
         key_func.key[i] = 0;
   }
   return( OK );
}



void connect_macros( void )
{
register int i;

   
   for (i=0; i<MAX_KEYS; i++)
      if (key_func.key[i] == PlayBack)
         key_func.key[i] = 0;

  
   g_status.stroke_count = 0;
   for (i=0; i<STROKE_LIMIT; i++)
      if (macro.strokes[i].next == STROKE_LIMIT+1)
         ++g_status.stroke_count;

   
   for (i=0; i<MAX_KEYS; i++) {
      if (macro.first_stroke[i] != STROKE_LIMIT+1)
         if (key_func.key[i] == 0)
            key_func.key[i] = PlayBack;
   }
}



int  play_back( WINDOW *window )
{
int  key;
int  rc = OK;
int  popped;            

  
   if (mode.record == TRUE && g_status.key_pressed == g_status.recording_key)
      rc = ERROR;
   else {

      
      g_status.macro_executing = TRUE;
      g_status.mstack_pointer  = -1;
      popped = FALSE;
      rc = OK;
      while (rc == OK) {

         
         if (popped == FALSE) {

            
            g_status.macro_next = macro.first_stroke[g_status.key_pressed-256];
            g_status.current_macro = g_status.key_pressed;
            key = macro.strokes[g_status.macro_next].key;
         }
         popped = FALSE;
         if (key != MAX_KEYS+1  &&  key != -1) {
            do {

               window = g_status.current_window;
               display_dirty_windows( window );
               ceh.flag = OK;
               g_status.key_pressed = macro.strokes[g_status.macro_next].key;
               g_status.command = getfunc( g_status.key_pressed );
               if (g_status.wrapped  ||  g_status.key_pending) {
                  g_status.key_pending = FALSE;
                  g_status.wrapped = FALSE;
                  show_search_message( CLR_SEARCH, g_display.mode_color );
               }

               
               if (g_status.control_break == TRUE) {
                  rc = ERROR;
                  break;
               }

              
               if (g_status.command == PlayBack) {

                 
                  if (g_status.current_macro != g_status.key_pressed) {
                     if (push_macro_stack(
                                   macro.strokes[g_status.macro_next].next )
                                   != OK) {
                        error( WARNING, window->bottom_line, ed16 );
                        rc = ERROR;
                     }
                     g_status.macro_next =
                                macro.first_stroke[g_status.key_pressed-256];
                     g_status.current_macro = g_status.key_pressed;
                     key = macro.strokes[g_status.macro_next].key;

                   
                     continue;
                  } else

                    
                     break;
               }


              
#if defined(  __MSC__ )
               assert( window != NULL );
               assert( window->file_info != NULL );
               assert( window->file_info->line_list != NULL );
               assert( window->file_info->line_list_end != NULL );
               assert( window->file_info->line_list_end->len == EOF );
               assert( window->visible == TRUE );
               assert( window->rline >= 0 );
               assert( window->rline <= window->file_info->length + 1 );
               assert( window->rcol >= 0 );
               assert( window->rcol < MAX_LINE_LENGTH );
               assert( window->ccol >= window->start_col );
               assert( window->ccol <= window->end_col );
               assert( window->bcol >= 0 );
               assert( window->bcol < MAX_LINE_LENGTH );
               assert( window->bcol == window->rcol-(window->ccol - window->start_col) );
               assert( window->start_col >= 0 );
               assert( window->start_col < window->end_col );
               assert( window->end_col < g_display.ncols );
               assert( window->cline >= window->top_line );
               assert( window->cline <= window->bottom_line );
               assert( window->top_line > 0 );
               assert( window->top_line <= window->bottom_line );
               assert( window->bottom_line < MAX_LINES );
               assert( window->bin_offset >= 0 );
               if (window->ll->next == NULL)
                  assert( window->ll->len == EOF );
               else
                  assert( window->ll->len >= 0 );
               assert( window->ll->len <  MAX_LINE_LENGTH );
#endif


               if (g_status.command >= 0 && g_status.command < NUM_FUNCS)
                   rc = (*do_it[g_status.command])( window );
               g_status.macro_next =
                          macro.strokes[g_status.macro_next].next;
            } while (rc == OK  &&  g_status.macro_next != -1);

            
            if (g_status.macro_next == -1 && g_status.mstack_pointer < 0)
               rc = ERROR;
            else if (rc != ERROR  &&  g_status.mstack_pointer >= 0) {

               
               if (g_status.current_macro != g_status.key_pressed) {
                  if (pop_macro_stack( &g_status.macro_next ) != OK) {
                     error( WARNING, window->bottom_line, ed17 );
                     rc = ERROR;
                  } else {
                     popped = TRUE;
                     key = macro.strokes[g_status.macro_next].key;
                  }
               }
            }
         }
      }
      g_status.macro_executing = FALSE;
   }
   return( OK );
}



int  push_macro_stack( int key )
{
   
   if (g_status.mstack_pointer+1 < MAX_KEYS) {

      
      ++g_status.mstack_pointer;
      macro_stack[g_status.mstack_pointer].key = key;
      macro_stack[g_status.mstack_pointer].macro = g_status.current_macro;
      return( OK );
   } else
      return( STACK_OVERFLOW );
}



int  pop_macro_stack( int *key )
{

  
   if (g_status.mstack_pointer >= 0) {

      
      *key = macro_stack[g_status.mstack_pointer].key;
      g_status.current_macro = macro_stack[g_status.mstack_pointer].macro;
      --g_status.mstack_pointer;
      return( OK );
   } else
      return( STACK_UNDERFLOW );
}



int  pause( WINDOW *arg_filler )
{
int  c;

  
   s_output( paused1, g_display.mode_line, 23, g_display.mode_color | 0x80 );
   s_output( paused2, g_display.mode_line, 23+strlen( paused1 ),
             g_display.mode_color );

  
   c = getkey( );
   show_modes( );
   if (mode.record == TRUE) {
    
      s_output( main15, g_display.mode_line, 23, g_display.mode_color | 0x80 );
      show_avail_strokes( );
   }
   return( c == ESC ? ERROR : OK );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av电影一区| 精品国产一区二区国模嫣然| 国产亚洲精品bt天堂精选| 男人的天堂亚洲一区| 日韩亚洲欧美中文三级| 紧缚捆绑精品一区二区| 国产午夜精品福利| 97精品久久久午夜一区二区三区| 亚洲色图丝袜美腿| 欧美艳星brazzers| 精品一区二区在线观看| 久久精品一区八戒影视| 一本到不卡免费一区二区| 久久av中文字幕片| 久久女同精品一区二区| 色哟哟亚洲精品| 免播放器亚洲一区| 国产精品网站在线播放| 日本久久电影网| 午夜国产精品影院在线观看| 精品精品国产高清一毛片一天堂| 成人免费va视频| 丝袜诱惑亚洲看片| 欧美激情一区二区三区全黄| 欧美优质美女网站| 经典三级一区二区| 亚洲自拍另类综合| 精品国产伦一区二区三区免费| 成人av中文字幕| 日韩国产一二三区| 国产精品不卡在线| 日韩一区二区三区免费观看| 成人黄色在线视频| 免费av成人在线| 亚洲狠狠丁香婷婷综合久久久| 精品美女一区二区| 欧美在线一区二区三区| 美腿丝袜在线亚洲一区| 国产精品女同一区二区三区| 欧美一区二区三区在| 99v久久综合狠狠综合久久| 蜜臀精品一区二区三区在线观看 | 国产一区二区主播在线| 国产精品伦理在线| 欧美一区二区三区四区久久 | 久久99精品久久久久久| 亚洲色图20p| 久久这里只精品最新地址| 欧美视频一区二区在线观看| 激情综合网天天干| 亚洲v精品v日韩v欧美v专区| 国产精品日日摸夜夜摸av| 91精品在线麻豆| 91久久精品午夜一区二区| 久久99热狠狠色一区二区| 午夜日韩在线电影| 亚洲一区在线看| 亚洲欧洲精品成人久久奇米网| 久久一区二区三区四区| 日韩精品一区二区三区视频| 欧美日韩国产一二三| 91久久精品一区二区| 99热精品一区二区| 成人精品免费视频| 丁香婷婷综合激情五月色| 久久不见久久见免费视频1| 婷婷夜色潮精品综合在线| 亚洲日本免费电影| 亚洲伦理在线精品| 亚洲精品欧美综合四区| 亚洲视频网在线直播| 综合亚洲深深色噜噜狠狠网站| 国产精品久久99| 国产精品热久久久久夜色精品三区| 2021久久国产精品不只是精品| 欧美一区二区三区在线| 91麻豆精品国产91久久久使用方法| 欧美色老头old∨ideo| 欧美电影一区二区三区| 欧美日韩亚洲综合在线| 欧美一区永久视频免费观看| 欧美丰满美乳xxx高潮www| 91精品在线一区二区| 欧美xxxxxxxx| 26uuu另类欧美亚洲曰本| 久久亚洲一级片| 国产视频一区二区在线观看| 国产精品你懂的在线欣赏| 亚洲视频电影在线| 午夜精品福利视频网站| 免费的国产精品| 韩国v欧美v亚洲v日本v| 成人在线综合网| 色婷婷激情综合| 欧美日韩成人激情| 欧美xxxxxxxx| 国产精品久久久久久久蜜臀| 国产精品盗摄一区二区三区| 一区二区三区在线免费| 午夜久久电影网| 蜜臀av国产精品久久久久| 国产精品亚洲一区二区三区在线| 成人免费视频国产在线观看| 91网站最新网址| 91麻豆精品久久久久蜜臀| 久久午夜电影网| 亚洲久草在线视频| 麻豆精品一二三| 99精品视频中文字幕| 欧美日韩成人一区二区| 久久久综合精品| 一区二区三区四区乱视频| 捆绑调教美女网站视频一区| 狠狠色狠狠色综合| 色婷婷久久综合| www一区二区| 亚洲成av人片| 99视频精品在线| 日韩免费性生活视频播放| 亚洲欧美日韩国产另类专区| 蜜桃av一区二区在线观看| 色综合久久久网| 精品欧美久久久| 亚洲一区二区三区四区中文字幕| 精品一区二区在线看| 欧美综合久久久| 国产视频一区在线观看| 日韩成人一区二区三区在线观看| 懂色av一区二区夜夜嗨| 欧美一区二区视频在线观看 | 国产精品视频免费| 七七婷婷婷婷精品国产| 91蜜桃免费观看视频| 精品捆绑美女sm三区| 午夜精品福利一区二区三区蜜桃| 成人午夜在线免费| 精品国产91久久久久久久妲己| 亚洲精选免费视频| 成人性生交大片免费看中文| 欧美一区二区三区免费视频 | 国产精品对白交换视频| 国产中文字幕精品| 欧美一区二区三区在线看| 亚洲一区在线观看视频| av不卡免费电影| 国产欧美在线观看一区| 精品午夜一区二区三区在线观看| 精品视频一区三区九区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国内精品久久久久影院色 | 精品久久久影院| 亚洲超碰精品一区二区| 日本韩国欧美一区二区三区| 欧美激情一区二区| 国产在线视频一区二区| 欧美成人精品福利| 日韩成人av影视| 777精品伊人久久久久大香线蕉| 亚洲麻豆国产自偷在线| 91视频免费观看| 亚洲欧美日韩中文字幕一区二区三区| 国产91高潮流白浆在线麻豆 | 精品国产亚洲在线| 奇米色一区二区三区四区| 欧美日韩高清一区二区三区| 伊人婷婷欧美激情| 日本高清无吗v一区| 亚洲精品一二三| 色综合久久中文字幕| 一区二区三区在线视频播放| 亚洲国产成人私人影院tom| 蜜桃av噜噜一区二区三区小说| 欧美人体做爰大胆视频| 五月天国产精品| 宅男在线国产精品| 黄页视频在线91| 国产网红主播福利一区二区| av电影在线观看完整版一区二区| 国产精品人成在线观看免费| 一本久久精品一区二区| 亚洲福利电影网| 日韩一区二区影院| 精品影院一区二区久久久| 欧美—级在线免费片| 99re这里只有精品6| 亚洲成av人片www| 精品少妇一区二区三区在线播放 | 91浏览器在线视频| 亚洲乱码国产乱码精品精98午夜| 欧美网站大全在线观看| 老司机精品视频一区二区三区| 久久久www成人免费无遮挡大片| 国产成人夜色高潮福利影视| 亚洲精品videosex极品| 欧美日韩精品综合在线| 久久爱www久久做| 国产精品国产三级国产aⅴ无密码| 欧洲日韩一区二区三区| 伦理电影国产精品| 国产精品福利电影一区二区三区四区|