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

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

?? keytab.c

?? BCAST Implementation for NS2
?? C
?? 第 1 頁 / 共 2 頁
字號:
 * of '\E' to denote the escape key. Similarly, meta characters can be * given directly in binary or expressed as M- followed by the character. * Meta characters are recorded as two characters in the binary output * string, the first being the escape key, and the second being the key * that was modified by the meta key. This means that binding to * \EA or ^[A or M-A are all equivalent. * * Input: *  keyseq   char *  The key sequence being added. * Input/Output: *  binary   char *  The binary version of the key sequence will be *                   assigned to binary[], which must have at least *                   as many characters as keyseq[] plus the number *                   of embedded binary meta characters. *  nc        int *  The number of characters assigned to binary[] *                   will be recorded in *nc. * Output: *  return    int    0 - OK. *                   1 - Error. */int _kt_parse_keybinding_string(const char *keyseq, char *binary,				       int *nc){  const char *iptr = keyseq;   /* Pointer into keyseq[] */  char *optr = binary;         /* Pointer into binary[] *//* * Parse the input characters until they are exhausted or the * output string becomes full. */  while(*iptr) {/* * Check for special characters. */    switch(*iptr) {    case '^':        /* A control character specification *//* * Convert the caret expression into the corresponding control * character unless no character follows the caret, in which case * record a literal caret. */      if(iptr[1]) {	*optr++ = MAKE_CTRL(iptr[1]);	iptr += 2;      } else {	*optr++ = *iptr++;      };      break;/* * A backslash-escaped character? */    case '\\':/* * Convert the escape sequence to a binary character. */      *optr++ = _kt_backslash_escape(iptr+1, &iptr);      break;/* * Possibly an emacs-style meta character? */    case 'M':      if(_kt_is_emacs_meta(iptr)) {	*optr++ = GL_ESC_CHAR;	iptr += 2;      } else {	*optr++ = *iptr++;      };      break;/* * Possibly an emacs-style control character specification? */    case 'C':      if(_kt_is_emacs_ctrl(iptr)) {	*optr++ = MAKE_CTRL(iptr[2]);	iptr += 3;      } else {	*optr++ = *iptr++;      };      break;    default:/* * Convert embedded meta characters into an escape character followed * by the meta-unmodified character. */      if(IS_META_CHAR(*iptr)) {	*optr++ = GL_ESC_CHAR;	*optr++ = META_TO_CHAR(*iptr);	iptr++;/* * To allow keysequences that start with printable characters to * be distinguished from the cursor-key keywords, prepend a backslash * to the former. This same operation is performed in gl_interpret_char() * before looking up a keysequence that starts with a printable character. */      } else if(iptr==keyseq && !IS_CTRL_CHAR(*iptr) &&		strcmp(keyseq, "up") != 0 && strcmp(keyseq, "down") != 0 &&		strcmp(keyseq, "left") != 0 && strcmp(keyseq, "right") != 0) {	*optr++ = '\\';	*optr++ = *iptr++;      } else {	*optr++ = *iptr++;      };    };  };/* * How many characters were placed in the output array? */  *nc = optr - binary;  return 0;}/*....................................................................... * Add, remove or modify an action. * * Input: *  kt     KeyTab *  The key-binding table. *  action   char *  The name of the action. *  fn    KtKeyFn *  The function that implements the action, or NULL *                   to remove an existing action. * Output: *  return    int    0 - OK. *                   1 - Error. */int _kt_set_action(KeyTab *kt, const char *action, KtKeyFn *fn){  Symbol *sym;   /* The symbol table entry of the action *//* * Check the arguments. */  if(!kt || !action) {    fprintf(stderr, "kt_set_action: NULL argument(s).\n");    return 1;  };/* * If no function was provided, delete an existing action. */  if(!fn) {    sym = _del_HashSymbol(kt->actions, action);    return 0;  };/* * If the action already exists, replace its action function. */  sym = _find_HashSymbol(kt->actions, action);  if(sym) {    sym->fn = (void (*)(void))fn;    return 0;  };/* * Add a new action. */  if(!_new_HashSymbol(kt->actions, action, 0, (void (*)(void))fn, NULL, 0)) {    fprintf(stderr, "Insufficient memory to record new key-binding action.\n");    return 1;  };  return 0;}/*....................................................................... * Compare two strings of specified length which may contain embedded * ascii NUL's. * * Input: *  s1       char *  The first of the strings to be compared. *  n1        int    The length of the string in s1. *  s2       char *  The second of the strings to be compared. *  n2        int    The length of the string in s2. * Output: *  return    int    < 0 if(s1 < s2) *                     0 if(s1 == s2) *                   > 0 if(s1 > s2) */static int _kt_compare_strings(const char *s1, int n1, const char *s2, int n2){  int i;/* * Find the first character where the two strings differ. */  for(i=0; i<n1 && i<n2 && s1[i]==s2[i]; i++)    ;/* * Did we hit the end of either string before finding a difference? */  if(i==n1 || i==n2) {    if(n1 == n2)      return 0;    else if(n1==i)      return -1;    else      return 1;  };/* * Compare the two characters that differed to determine which * string is greatest. */  return s1[i] - s2[i];}/*....................................................................... * Assign a given action function to a binding table entry. * * Input: *  sym       KeySym *  The binding table entry to be modified. *  binder  KtBinder    The source of the binding. *  keyfn    KtKeyFn *  The action function. */static void _kt_assign_action(KeySym *sym, KtBinder binder, KtKeyFn *keyfn){/* * Record the action according to its source. */  switch(binder) {  case KTB_USER:    sym->user_fn = keyfn;    break;  case KTB_TERM:    sym->term_fn = keyfn;    break;  case KTB_NORM:  default:    sym->norm_fn = keyfn;    break;  };/* * Which of the current set of bindings should be used? */  if(sym->user_fn)    sym->keyfn = sym->user_fn;  else if(sym->norm_fn)    sym->keyfn = sym->norm_fn;  else    sym->keyfn = sym->term_fn;  return;}/*....................................................................... * Remove all key bindings that came from a specified source. * * Input: *  kt        KeyTab *  The table of key bindings. *  binder  KtBinder    The source of the bindings to be cleared. */void _kt_clear_bindings(KeyTab *kt, KtBinder binder){  int oldkey;   /* The index of a key in the original binding table */  int newkey;   /* The index of a key in the updated binding table *//* * If there is no table, then no bindings exist to be deleted. */  if(!kt)    return;/* * Clear bindings of the given source. */  for(oldkey=0; oldkey<kt->nkey; oldkey++)    _kt_assign_action(kt->table + oldkey, binder, 0);/* * Delete entries that now don't have a binding from any source. */  newkey = 0;  for(oldkey=0; oldkey<kt->nkey; oldkey++) {    KeySym *sym = kt->table + oldkey;    if(!sym->keyfn) {      _del_StringMemString(kt->smem, sym->keyseq);    } else {      if(oldkey != newkey)	kt->table[newkey] = *sym;      newkey++;    };  };/* * Record the number of keys that were kept. */  kt->nkey = newkey;  return;}/*....................................................................... * Translate a backslash escape sequence to a binary character. * * Input: *  string  const char *   The characters that follow the backslash. * Input/Output: *  endp    const char **  If endp!=NULL, on return *endp will be made to *                         point to the character in string[] which follows *                         the escape sequence. * Output: *  return        char     The binary character. */static char _kt_backslash_escape(const char *string, const char **endp){  char c;  /* The output character *//* * Is the backslash followed by one or more octal digits? */  switch(*string) {  case '0': case '1': case '2': case '3':  case '4': case '5': case '6': case '7':    c = strtol(string, (char **)&string, 8);    break;  case 'a':    c = '\a';    string++;    break;  case 'b':    c = '\b';    string++;    break;  case 'e': case 'E': /* Escape */    c = GL_ESC_CHAR;    string++;    break;  case 'f':    c = '\f';    string++;    break;  case 'n':    c = '\n';    string++;    break;  case 'r':    c = '\r';    string++;    break;  case 't':    c = '\t';    string++;    break;  case 'v':    c = '\v';    string++;    break;  case '\0':    c = '\\';    break;  default:    c = *string++;    break;  };/* * Report the character which follows the escape sequence. */  if(endp)    *endp = string;  return c;}/*....................................................................... * Return non-zero if the next two characters are M- and a third character * follows. Otherwise return 0. * * Input: *  string   const char *  The sub-string to scan. * Output: *  return          int    1 - The next two characters are M- and these *                             are followed by at least one character. *                         0 - The next two characters aren't M- or no *                             character follows a M- pair. */static int _kt_is_emacs_meta(const char *string){  return *string++ == 'M' && *string++ == '-' && *string;}/*....................................................................... * Return non-zero if the next two characters are C- and a third character * follows. Otherwise return 0. * * Input: *  string   const char *  The sub-string to scan. * Output: *  return          int    1 - The next two characters are C- and these *                             are followed by at least one character. *                         0 - The next two characters aren't C- or no *                             character follows a C- pair. */static int _kt_is_emacs_ctrl(const char *string){  return *string++ == 'C' && *string++ == '-' && *string;}/*....................................................................... * Merge an array of bindings with existing bindings. * * Input: *  kt                    KeyTab *  The table of key bindings. *  binder              KtBinder    The source of the bindings. *  bindings  const KtKeyBinding *  The array of bindings. *  n                        int    The number of bindings in bindings[]. * Output: *  return                   int    0 - OK. *                                  1 - Error. */int _kt_add_bindings(KeyTab *kt, KtBinder binder, const KtKeyBinding *bindings,		     unsigned n){  int i;/* * Check the arguments. */  if(!kt || !bindings) {    fprintf(stderr, "_kt_add_bindings: NULL argument(s).\n");    return 1;  };/* * Install the array of bindings. */  for(i=0; i<n; i++) {    if(_kt_set_keybinding(kt, binder, bindings[i].keyseq, bindings[i].action))      return 1;  };  return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色欲色欲www| 久久亚洲精精品中文字幕早川悠里| 中文字幕av一区 二区| 国产成人午夜精品5599| 久久久久99精品一区| 成人av资源站| 亚洲伦在线观看| 欧美剧情电影在线观看完整版免费励志电影| 亚洲一区日韩精品中文字幕| 欧美精品黑人性xxxx| 黄色精品一二区| 国产精品网站在线播放| 欧美综合一区二区三区| 亚洲chinese男男1069| 欧美成人三级在线| 成人av电影在线观看| 亚洲成在人线免费| 久久久www成人免费无遮挡大片| 成人av小说网| 日韩福利电影在线| 国产片一区二区三区| 欧美日韩一级二级| 国模大尺度一区二区三区| 国产精品国产三级国产aⅴ原创| 欧美婷婷六月丁香综合色| 美女性感视频久久| 中文字幕第一区| 欧美一区二区三区免费视频| 丁香婷婷综合激情五月色| 一区二区三区精品久久久| 精品国产伦一区二区三区观看体验| 福利视频网站一区二区三区| 亚洲超丰满肉感bbw| 国产色产综合产在线视频| 欧美丝袜丝交足nylons图片| 免费成人你懂的| 在线观看视频一区二区| 蜜桃av一区二区三区电影| 国产精品女同一区二区三区| 在线免费观看不卡av| 国产精品夜夜爽| 香蕉久久夜色精品国产使用方法| 国产午夜亚洲精品午夜鲁丝片 | 亚洲成av人片| 国产精品午夜春色av| 91麻豆精品国产91久久久使用方法| 国产91精品免费| 蜜桃一区二区三区在线| 一区二区三区精品视频| 中文久久乱码一区二区| 日韩午夜av一区| 欧美美女bb生活片| 白白色 亚洲乱淫| 国产精品一区二区在线播放| 无码av免费一区二区三区试看| 中文字幕一区二区在线播放| 精品国产精品一区二区夜夜嗨| 欧美体内she精视频| 99视频精品在线| 粉嫩欧美一区二区三区高清影视 | 成人久久18免费网站麻豆| 免费久久99精品国产| 亚洲一区成人在线| 亚洲欧美日韩国产另类专区 | 欧美一区二区三区不卡| 欧美特级限制片免费在线观看| 99久久精品99国产精品| 国产成人精品亚洲午夜麻豆| 精品一区二区三区香蕉蜜桃| 免费观看一级欧美片| 日韩精品电影在线观看| 天天免费综合色| 午夜av一区二区| 日韩国产精品91| 香蕉影视欧美成人| 日精品一区二区三区| 偷拍日韩校园综合在线| 视频一区国产视频| 日韩激情在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 日日嗨av一区二区三区四区| 秋霞av亚洲一区二区三| 裸体健美xxxx欧美裸体表演| 免费看黄色91| 国产精品91xxx| 成人精品小蝌蚪| 一本色道**综合亚洲精品蜜桃冫 | gogo大胆日本视频一区| av一区二区三区在线| 91免费观看在线| 欧美色视频在线观看| 欧美精品久久一区| 91精品国产欧美一区二区18| 精品剧情在线观看| 国产视频视频一区| 依依成人精品视频| 丝袜亚洲精品中文字幕一区| 久久99日本精品| 国产精品一二三四区| 99久久婷婷国产精品综合| 欧美无乱码久久久免费午夜一区 | 国产成+人+日韩+欧美+亚洲| 成人美女视频在线观看18| 91福利视频在线| 亚洲精品在线免费播放| 欧美激情一区二区三区四区| 亚洲综合自拍偷拍| 蜜桃免费网站一区二区三区| 成人国产精品免费观看| 欧美三级三级三级爽爽爽| 精品福利在线导航| 亚洲欧美日韩国产一区二区三区 | 福利电影一区二区| 91国偷自产一区二区使用方法| 欧美日韩精品一区二区三区蜜桃| 日韩亚洲欧美一区| 亚洲三级免费观看| 蜜桃视频第一区免费观看| 99在线热播精品免费| 91精品国产综合久久久久久漫画| 久久免费美女视频| 亚洲 欧美综合在线网络| 国产一区二区三区蝌蚪| 在线观看日韩精品| 久久麻豆一区二区| 一区二区三区精品久久久| 国产精品一二三| 91精品黄色片免费大全| 亚洲品质自拍视频| 国产一区二区三区在线观看免费| 91国偷自产一区二区三区成为亚洲经典| 日韩欧美在线一区二区三区| 亚洲日本va在线观看| 国产真实乱子伦精品视频| 欧美视频三区在线播放| 成人欧美一区二区三区| 国内精品自线一区二区三区视频| 在线免费观看视频一区| 欧美国产国产综合| 国产在线麻豆精品观看| 欧美日本在线播放| 亚洲免费av高清| 成人免费电影视频| 久久久91精品国产一区二区精品 | 亚洲欧洲成人自拍| 国产美女视频一区| 日韩一区二区在线观看视频| 亚洲精品国产无套在线观| 国产福利视频一区二区三区| 欧美一级夜夜爽| 亚洲综合丁香婷婷六月香| 99精品视频中文字幕| 久久久精品日韩欧美| 久久成人羞羞网站| 欧美一级黄色录像| 奇米色777欧美一区二区| 欧美日韩精品一区二区在线播放| 亚洲免费在线视频一区 二区| 粉嫩13p一区二区三区| 久久精品视频免费| 成人性生交大片免费看视频在线| 精品国产99国产精品| 国产自产v一区二区三区c| 精品国产欧美一区二区| 国产麻豆视频一区| 亚洲精选视频免费看| 成人免费视频一区| 国产精品福利一区| 北条麻妃一区二区三区| 国产精品传媒入口麻豆| 91色porny蝌蚪| 亚洲最新在线观看| 欧美日韩成人激情| 日本亚洲最大的色成网站www| 欧美一区二区视频在线观看2022| 日韩成人一级大片| 日韩精品一区二区三区四区视频| 久久精工是国产品牌吗| 国产午夜精品美女毛片视频| 99久久er热在这里只有精品66| 亚洲视频 欧洲视频| 欧美三级资源在线| 性久久久久久久久久久久| 777色狠狠一区二区三区| 免费成人性网站| 久久久久久久综合狠狠综合| 国产不卡免费视频| 国产亚洲精品精华液| av一区二区三区四区| 亚洲精品中文在线影院| 欧美影视一区二区三区| 蜜臂av日日欢夜夜爽一区| 精品国产伦一区二区三区观看方式 | 亚洲乱码精品一二三四区日韩在线| 国产福利一区在线| 中文字幕中文字幕在线一区| 99国产精品久久久久| 久久久久久久久蜜桃| 日本丰满少妇一区二区三区| 亚洲福利视频一区|