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

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

?? irfunc.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 */

/*
 * irfunc.c, infrared functions (Irman specific)
 */
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>

#include "ir.h"

/* generic function for ir_get_code() and ir_poll_code() */
static unsigned char *ir_read_code(unsigned long timeout);
/* converts a single hex character to an integer */
static int ir_hex_to_int(unsigned char hex);

/* flag to enable use of higher level functions */
static int ir_enabled=0;

/* output hex digits */
static char ir_hexdigit[16] = {
	'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
};

int ir_init(char *filename)
{
  int rdchar;
  
  if (ir_enabled) {
    errno = EBUSY;	/* we already have a high level ir setup */
    return -1;
  }

  if (ir_open_port(filename) < 0) {
    return -1;
  }

  ir_clear_buffer();

  if (ir_write_char('I') < 0)
    return -1;
  
  ir_usleep(IR_HANDSHAKE_GAP);
  
  if (ir_write_char('R') < 0)
    return -1;
  
  /* we'll be nice and give the box a good chance to send an 'O' */
  
  while ((rdchar = ir_read_char(IR_HANDSHAKE_TIMEOUT)) != 'O') {
    if (rdchar < 0) {	/* error or timeout */
      return -1;
    }
  }

  /* as regards the 'K', however, that really must be the next character */
  
  rdchar = ir_read_char(IR_HANDSHAKE_TIMEOUT);
  if (rdchar < 0) {
    return -1;
  }
  
  /* ENOEXEC is the closest error I could find, that would also not be
   * generated by ir_read_char().  Anyway, ENOEXEC does more or less mean
   * "I don't understand this data I've been given"
   */
  if (rdchar != 'K') {
    errno = ENOEXEC;
    return -1;
  }

  /* we are now ready to roll */
  ir_enabled = 1;
  return 0;
}


/* simply a wrapper for ir_close_port() */

int ir_finish(void)
{
  if (!ir_enabled) {
    errno = ENXIO;
    return -1;
  }
  
  ir_enabled = 0;
  
  return ir_close_port();
}


/* this function is used by both ir_get_code and ir_poll_code,
 * the difference being in the timeout for the first piece of data.
 * we also have a short timeout whatever for the remaining five bytes,
 * in case computer and Irman get out of sync we can just raise an error
 * and get back to normal life.
 *
 * note esp. that these functions return a pointer to statically defined
 * data.  In the forseeable usage of LIBIR this seems the easiest way.
 */

static unsigned char *ir_read_code(unsigned long timeout)
{
  static unsigned char codebuf[IR_CODE_LEN];
  int i, datum;
    
  datum = ir_read_char(timeout);
  if (datum < 0)
    return NULL;
    
  codebuf[0] = (unsigned char) datum;
  
  for (i=1; i<IR_CODE_LEN; i++) {
    datum = ir_read_char(IR_POLL_TIMEOUT);
    if (datum < 0) {
      return NULL;
    } else {
      codebuf[i] = (unsigned char)datum;
    }
  }
  
  return codebuf;
}

unsigned char *ir_get_code(void)
{
  /* well dodgy choice of error here...! */
  if (!ir_enabled) {
    errno = ENXIO;
    return NULL;
  }
  
  return ir_read_code(IR_BLOCKING);
}

unsigned char *ir_poll_code(void)
{
  if (!ir_enabled) {
    errno = ENXIO;
    return NULL;
  }
  
  return ir_read_code(0);
}

char *ir_code_to_text(unsigned char *code)
{
  static char text[2 * IR_CODE_LEN + 1];
  int i;
  char *j;
  
  j = text;
  for (i=0; i < IR_CODE_LEN; i++) {
    *j++ = ir_hexdigit[code[i] >> 4];
    *j++ = ir_hexdigit[code[i] & 15];
  }
  *j = '\0';

  return text;
}

static int ir_hex_to_int(unsigned char hex)
{
  if (hex >= '0' && hex <= '9')
    return hex - '0';
    
  hex = tolower(hex);
  if (hex >= 'a' && hex <= 'f')
    return hex - 'a' + 10;
    
  /* error! */
  return 0;
}


unsigned char *ir_text_to_code(char *text)
{
  static char code[IR_CODE_LEN];
  int i;
  char *j;
  
  j = text;
  for (i=0; i<IR_CODE_LEN; i++) {
    if (!j[0] || !j[1]) {
      break;
    }
    code[i]  = (ir_hex_to_int(*j++) << 4) & 0xf0;
    code[i] += (ir_hex_to_int(*j++)     ) & 0x0f;
  }
  
  /* if string isn't long enough, pad with zeros. This is (marginally)
   * better than the leaving in the remains of the last conversion
   */
  for ( ; i<IR_CODE_LEN; i++)
    code[i] = '\0';
  
  return code;
}


/* this function should never be called, but maybe someone wants to manually
 * open the ir channel, then use the higher level functions.  If you use this
 * then you deserve any problems you get!  It is only here because I don't
 * believe in unneccesary restrictions.
 */
void ir_set_enabled(int val)
{
  ir_enabled = val;
}

/* end of irfunc.c */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合九色综合欧美就去吻| 午夜一区二区三区视频| 亚洲天天做日日做天天谢日日欢| 亚洲.国产.中文慕字在线| 国产成人精品www牛牛影视| 欧美日韩在线直播| 国产精品国产三级国产aⅴ无密码| 五月开心婷婷久久| 色综合天天视频在线观看| 国产清纯白嫩初高生在线观看91 | 久久国产精品一区二区| 色久综合一二码| 国产欧美日韩视频一区二区| 日本在线观看不卡视频| 欧美综合久久久| 亚洲欧洲日韩av| 成人免费视频caoporn| 欧美第一区第二区| 日韩不卡免费视频| 欧美日韩在线一区二区| 一区二区视频在线| 91网址在线看| 亚洲美女在线一区| 一本色道a无线码一区v| 国产精品成人一区二区艾草| 国产精品 欧美精品| 久久综合久色欧美综合狠狠| 青青草国产精品97视觉盛宴 | 91老师国产黑色丝袜在线| 欧美极品美女视频| 成人综合婷婷国产精品久久| 久久午夜国产精品| 久久国产成人午夜av影院| 日韩欧美国产精品| 蓝色福利精品导航| 精品少妇一区二区三区在线播放| 男人的j进女人的j一区| 日韩亚洲欧美在线| 精久久久久久久久久久| 久久精品一区蜜桃臀影院| 国产成人日日夜夜| 亚洲婷婷综合色高清在线| 在线观看网站黄不卡| 午夜精品久久久久久久蜜桃app| 欧美亚洲图片小说| 日韩成人精品在线观看| 久久综合精品国产一区二区三区| 国产一区二区主播在线| 国产女人18毛片水真多成人如厕 | 美女尤物国产一区| 精品国产一区a| 国产一区二区三区在线观看免费视频 | 国产精品亚洲第一| 欧美激情一区二区三区四区| 91在线视频免费91| 亚洲大片一区二区三区| 日韩精品中文字幕在线一区| 成人一级黄色片| 一区二区三区在线观看动漫 | 日韩国产一区二| 精品国产成人系列| 99久久精品一区二区| 亚洲一级二级在线| ww久久中文字幕| 99热精品国产| 另类小说综合欧美亚洲| 国产精品久久久一区麻豆最新章节| 色综合久久久久综合99| 久久成人免费日本黄色| 亚洲视频一区二区在线| 亚洲精品一区二区三区99 | 国产成人h网站| 一级中文字幕一区二区| 精品国产91久久久久久久妲己 | 欧美日韩在线一区二区| 国产精品91一区二区| 亚洲18色成人| 国产精品理伦片| 日韩三级视频在线观看| 99久久99久久精品免费看蜜桃| 三级在线观看一区二区| 国产精品久久久久婷婷| 精品久久久久久久久久久院品网 | 一区二区三区资源| 久久网站最新地址| 欧美日韩综合一区| www.日韩精品| 国模娜娜一区二区三区| 日本伊人精品一区二区三区观看方式 | 一区二区三区影院| 欧美国产成人在线| 欧美经典一区二区三区| 欧美日韩成人在线一区| 99国产精品久| 粉嫩蜜臀av国产精品网站| 婷婷开心久久网| 一区二区三区四区蜜桃| 中文字幕欧美日本乱码一线二线| 日韩欧美一区中文| 欧美日韩不卡一区| 欧美丝袜第三区| 91国产免费观看| 色综合久久99| 97久久超碰精品国产| 国产乱理伦片在线观看夜一区| 日本网站在线观看一区二区三区| 一区二区三区在线视频播放 | 在线免费观看日韩欧美| 成人h动漫精品一区二| 国产精品69久久久久水密桃| 久久精品久久精品| 久久精品国产**网站演员| 免费观看91视频大全| 日本aⅴ亚洲精品中文乱码| 视频在线在亚洲| 秋霞午夜av一区二区三区| 午夜精品久久久久久久99樱桃| 亚洲黄一区二区三区| 亚洲一区二区高清| 日韩成人av影视| 久久成人羞羞网站| 国产精品亚洲综合一区在线观看| 国产精品一线二线三线| 成人小视频免费观看| 99久久久精品| 在线观看视频一区二区 | 91视频免费播放| 日本乱人伦aⅴ精品| 欧美日韩在线一区二区| 日韩一级片在线播放| 精品成a人在线观看| 日本一区二区视频在线观看| 国产精品看片你懂得| 一区二区久久久| 麻豆精品久久久| 国产91精品入口| 日本精品免费观看高清观看| 欧美日韩精品一二三区| 精品美女在线观看| 最新国产成人在线观看| 午夜精品久久久| 国产一区二区调教| 一本大道av一区二区在线播放 | 久久久蜜臀国产一区二区| 国产精品免费视频一区| 亚洲资源中文字幕| 麻豆精品新av中文字幕| zzijzzij亚洲日本少妇熟睡| 91国产福利在线| 精品国产伦一区二区三区观看方式| 国产清纯白嫩初高生在线观看91 | 全部av―极品视觉盛宴亚洲| 国产在线一区观看| 色老综合老女人久久久| 日韩亚洲欧美在线| 亚洲欧美日韩综合aⅴ视频| 日本中文一区二区三区| www.欧美日韩| 欧美一区二区三区男人的天堂| 久久久久成人黄色影片| 亚洲福利一区二区三区| 国产不卡免费视频| 91精品国产91久久久久久一区二区 | 日韩欧美精品在线| 亚洲视频在线观看三级| 韩国av一区二区三区| 欧美性受xxxx黑人xyx| 国产喂奶挤奶一区二区三区| 亚洲一区二区三区小说| 成人午夜免费av| 在线播放中文字幕一区| 国产精品欧美极品| 国产一区二区中文字幕| 欧美精品色一区二区三区| 成人免费一区二区三区在线观看| 午夜精品久久久久久久久久 | 一区二区三区四区五区视频在线观看| 精品一区二区免费在线观看| 欧美午夜宅男影院| 亚洲女同女同女同女同女同69| 国产精一品亚洲二区在线视频| 91麻豆精品国产自产在线观看一区 | 欧美午夜一区二区三区| 国产精品久久看| 国产成人免费在线视频| 欧美一区二区日韩| 亚洲成a人v欧美综合天堂| 色综合婷婷久久| 国产日韩欧美在线一区| 精品一区二区三区日韩| 欧美一区日韩一区| 午夜一区二区三区在线观看| 一本到高清视频免费精品| 国产精品第四页| 国产aⅴ综合色| 欧美国产日本韩| 国产丶欧美丶日本不卡视频| 久久综合色播五月| 国产剧情一区二区三区| 久久久久久综合|