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

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

?? ircmd.c

?? vc++ mp3 源碼下載 使用vc寫的mp3 播放器
?? C
字號:
/* irfunc.c v0.3 (c) 1998 Tom Wheeley <tomw@tsys.demon.co.uk>   */
/* this code is placed under the LGPL, see www.gnu.org for info */

/*
 * ircmd.c, Infra red command interface
 */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>

#ifndef __IR
#define __IR 1
#endif

#include "ir.h"

/* hashtable (array of pointers to ht_entry_t) */
static ir_htentry_t **ir_ht = NULL;

/* internal hash table functions - self explanatory */
static unsigned ir_hash_code(unsigned char *code, unsigned max);
static int ir_hash_add(unsigned char *code, int cmd);
static int ir_hash_match(unsigned char *code);
static int ir_hash_remove(unsigned char *code);
static void ir_hash_free(void);


/* checks the command is not one of the reserved ones, then adds it to the
 * hashtable associated with the given ir code */
 
int ir_register_command(unsigned char *code, int command)
{
  if (command <= 0) {
    errno = EINVAL;
    return -1;
  }
  return ir_hash_add(code, command);
}


/* removes command associated with code from the hashtable.
 * should we also enable removal indexed by command? - bit fiddly really,
 * but could actually be more useful.
 */

int ir_remove_command(unsigned char *code)
{
  return ir_hash_remove(code);
}


/* blocking wait for a code, then return a match if we find one, else
 * return IR_CMD_UNKNOWN for an unknown/spurious code, or IR_CMD_ERROR
 */

int ir_get_command(void)
{
  unsigned char *code;

  code = ir_get_code();
  if (code) {
    return ir_hash_match(code);
  } else {
    return IR_CMD_ERROR;
  }
}


/* polling wait for a command.  returns IR_CMD_UNKNOWN if nothing to 
 * be read from the port
 */

int ir_poll_command(void)
{
  unsigned char *code;
  
  code = ir_poll_code();
  if (code) {
    return ir_hash_match(code);
  } else {
    if (errno == ETIMEDOUT) {
      return IR_CMD_UNKNOWN;	/* the more harmless of errors */
    } else {
      return IR_CMD_ERROR;
    }
  }
}


void ir_free_commands(void)
{
  ir_hash_free();
}

/* all the internal hash table crap (separate chaining) */

static unsigned ir_hash_code(unsigned char *code, unsigned max)
{
 unsigned hashval;
 int i;
 
 hashval = 0;
 for (i = 0; i < IR_CODE_LEN; i++) {
   hashval = code[i] * 7 + hashval * 15;
 }
 return hashval % max;
}

static int ir_hash_add(unsigned char *code, int cmd)
{
  unsigned hashval;
  ir_htentry_t *node;
  
  if (!ir_ht) {
    ir_ht = calloc(IR_HT_SIZE, sizeof (ir_htentry_t *));
    if (!ir_ht) {
      errno = ENOMEM;
      return -1;
    }
  }
  
  hashval = ir_hash_code(code, IR_HT_SIZE);
  for (node=ir_ht[hashval]; node; node=node->next) {
    if (!memcmp(code, node->code, IR_CODE_LEN)) {
      errno = EBUSY;		/* code already in use */ 
      return - node->cmd;	/* so we know what has it */
    }
  }

  node = malloc(sizeof (ir_htentry_t));
  if (!node) {
    errno = ENOMEM;
    return -1;
  }
  
  memcpy(node->code, code, IR_CODE_LEN);
  node->cmd = cmd;
  node->next = ir_ht[hashval];
  ir_ht[hashval] = node;

  return 0;
}

static int ir_hash_match(unsigned char *code)
{
  ir_htentry_t *node;
  unsigned hashval;

  if (!ir_ht) {
    return IR_CMD_UNKNOWN;
  }
  
  hashval = ir_hash_code(code, IR_HT_SIZE);
  for (node = ir_ht[hashval]; node; node = node->next) {
    if (!memcmp(code, node->code, IR_CODE_LEN)) {
      return node->cmd;
    }
  }
    
  return IR_CMD_UNKNOWN;
}

static int ir_hash_remove(unsigned char *code)
{
  ir_htentry_t **pn;
  ir_htentry_t *dead;
  unsigned hashval;
  
  if (!ir_ht) {
    return -1;
  }
  
  hashval = ir_hash_code(code, IR_HT_SIZE);
  for (pn = &(ir_ht[hashval]); *pn; pn = &((*pn)->next)) {
    if (!memcmp(code, (*pn)->code, IR_CODE_LEN)) {
      dead = (*pn);
      (*pn) = dead->next;
      free(dead);
      return 0;
    }
  }
  return -1;
}

static void ir_hash_free(void)
{
  int i;
  ir_htentry_t *node;
  ir_htentry_t *dead;
  
  if (!ir_ht)
    return;
    
  for (i=0; i<IR_HT_SIZE; i++) {
    for (node = ir_ht[i]; node; ) {
      dead = node;
      node = dead->next;
      free(dead);
    }
  }
  
  free(ir_ht);
  ir_ht = NULL;
}


/* end of ircmd.c */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩片之四级片| 欧美精品xxxxbbbb| 国产精品66部| 韩国av一区二区| 国产suv精品一区二区三区| 国产精品 日产精品 欧美精品| 麻豆高清免费国产一区| 国产一区二三区| 国产成人免费视| 91在线一区二区| 在线观看不卡一区| 7777女厕盗摄久久久| 精品国产免费一区二区三区四区| 久久久午夜精品| 国产精品美女久久久久aⅴ| 亚洲欧美激情插| 日韩国产高清在线| 国产在线视频一区二区三区| 成人av在线资源网站| 国产精品美女一区二区三区 | 极品少妇一区二区三区精品视频| 日韩福利视频导航| 久久97超碰色| aa级大片欧美| 欧美日韩国产系列| 久久久久久99久久久精品网站| 国产精品嫩草久久久久| 亚洲一区成人在线| 韩国成人精品a∨在线观看| 成人精品国产免费网站| 欧美日韩中文字幕一区二区| 久久综合色鬼综合色| 亚洲手机成人高清视频| 久久国内精品自在自线400部| 成人综合在线观看| 美脚の诱脚舐め脚责91 | 视频一区欧美精品| 韩国av一区二区三区四区| 国产乱码精品一区二区三| 99久久婷婷国产| 在线播放中文字幕一区| 国产精品护士白丝一区av| 亚洲va欧美va人人爽午夜| 国产成人一级电影| 欧美一区二区三区四区在线观看 | 亚洲成人在线免费| 成人涩涩免费视频| 精品欧美黑人一区二区三区| 亚洲高清免费观看| 精品一区二区三区影院在线午夜| 日韩福利视频网| 97精品久久久午夜一区二区三区 | 色偷偷一区二区三区| 制服丝袜av成人在线看| 亚洲欧美日韩系列| 国产大片一区二区| 精品国产免费久久| 图片区小说区国产精品视频| 99re热这里只有精品免费视频 | 亚洲国产aⅴ天堂久久| 成人国产精品免费观看视频| 久久众筹精品私拍模特| 毛片不卡一区二区| 在线成人av网站| 亚洲电影中文字幕在线观看| 91搞黄在线观看| 亚洲欧美福利一区二区| 狠狠色狠狠色综合| 欧美老女人第四色| 一区二区三区高清不卡| 色综合久久中文综合久久97| 国产精品入口麻豆九色| 国产精品一区二区免费不卡 | 亚洲欧洲成人自拍| 99国产精品国产精品毛片| 国产精品看片你懂得| 91色在线porny| 亚洲日本韩国一区| 91麻豆国产精品久久| 又紧又大又爽精品一区二区| 91精彩视频在线观看| 亚洲一本大道在线| 精品国产乱码久久久久久久久| 蜜臀av亚洲一区中文字幕| 日韩美女一区二区三区| 精品一区二区三区久久| 国产日韩亚洲欧美综合| av激情亚洲男人天堂| 亚洲激情中文1区| 欧美老女人在线| 精品一区二区三区在线播放| 欧美激情中文字幕| 91视频在线看| 日本成人中文字幕| 国产偷v国产偷v亚洲高清| 99精品视频在线免费观看| 有码一区二区三区| 精品欧美黑人一区二区三区| 成人自拍视频在线观看| 亚洲一区二区三区四区的| 欧美一区二区三区日韩视频| 国产精品538一区二区在线| 亚洲欧洲一区二区三区| 欧美日本国产视频| 国产成人综合在线| 一区二区三区欧美视频| 欧美刺激午夜性久久久久久久| 国产成都精品91一区二区三| 亚洲激情校园春色| 欧美成人伊人久久综合网| 99在线精品视频| 久99久精品视频免费观看| 中文字幕一区二区不卡| 欧美一级久久久久久久大片| 成人黄动漫网站免费app| 日韩经典一区二区| 亚洲欧美视频在线观看| 日韩精品一区二区三区在线播放| 不卡电影免费在线播放一区| 日本免费新一区视频| 亚洲欧洲一区二区三区| 久久久久久黄色| 正在播放一区二区| 色综合中文字幕国产 | 亚洲一区二区在线免费看| 欧美精品一区二区三| 欧美午夜精品一区二区蜜桃| 国产美女在线观看一区| 日本不卡123| 亚洲永久精品大片| 中文字幕亚洲不卡| 国产色一区二区| 精品福利一区二区三区 | 94色蜜桃网一区二区三区| 久久国产精品99久久久久久老狼| 亚洲欧美成aⅴ人在线观看 | 91成人网在线| 波多野结衣的一区二区三区| 国内精品久久久久影院色| 天堂久久久久va久久久久| 一区二区高清免费观看影视大全 | 欧美一区二区成人6969| 欧美日韩中文国产| 在线观看视频一区二区欧美日韩| 99久久国产综合精品麻豆| 高潮精品一区videoshd| 国产91丝袜在线18| 国产伦精一区二区三区| 国产精品综合av一区二区国产馆| 毛片基地黄久久久久久天堂| 麻豆成人久久精品二区三区红 | 国产精品黄色在线观看| 亚洲国产精品99久久久久久久久| 久久久亚洲精品石原莉奈| 精品免费99久久| 欧美精品一区二区三| 久久久久国产免费免费| 国产日韩欧美电影| 136国产福利精品导航| 伊人夜夜躁av伊人久久| 五月激情丁香一区二区三区| 午夜精品福利一区二区三区av| 亚洲国产精品视频| 免费成人在线网站| 国产**成人网毛片九色| 99re亚洲国产精品| 欧美日本一道本在线视频| 678五月天丁香亚洲综合网| 欧美大胆人体bbbb| 国产清纯白嫩初高生在线观看91 | 岛国av在线一区| 91网站在线播放| 欧美日韩视频在线观看一区二区三区| 91国偷自产一区二区开放时间| 欧美精三区欧美精三区| 精品伦理精品一区| 日韩一区有码在线| 秋霞国产午夜精品免费视频| 国产不卡视频一区| 欧美三区在线观看| 国产亚洲欧美日韩在线一区| 中文字幕在线观看不卡| 日韩极品在线观看| 成人免费视频一区二区| 3d成人动漫网站| **性色生活片久久毛片| 人妖欧美一区二区| 91污片在线观看| 26uuu久久天堂性欧美| 亚洲精品菠萝久久久久久久| 久久国产精品免费| 欧美性猛片xxxx免费看久爱| 久久综合色综合88| 亚洲123区在线观看| 成人一区二区三区| 精品国产一区二区三区久久影院 | 国产精一品亚洲二区在线视频| 91麻豆精东视频| 国产视频一区在线观看 | 亚洲另类中文字|