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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sbpcd.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*==========================================================================*/
static int convert_UPC(u_char *p)
{
  int i;

  p++;
  if (!new_drive) p[13]=0;
  for (i=0;i<7;i++)
    {
      if (new_drive) DS[d].UPC_buf[i]=swap_nibbles(*p++);
      else
	{
	  DS[d].UPC_buf[i]=((*p++)<<4)&0xFF;
	  DS[d].UPC_buf[i] |= *p++;
	}
    }
  DS[d].UPC_buf[6] &= 0xF0;
  return (0);
}
/*==========================================================================*/
static int xx_ReadUPC(void)
{
  int i;

  DS[d].diskstate_flags &= ~upc_bit;
  clr_cmdbuf();
  if (new_drive)
    {
      drvcmd[0]=0x88;
      response_count=8;
      flags_cmd_out=f_putcmd|f_ResponseStatus|f_obey_p_check;
    }
  else
    {
      drvcmd[0]=0x08;
      response_count=0;
      flags_cmd_out=f_putcmd|f_lopsta|f_getsta|f_ResponseStatus|f_obey_p_check|f_bit1;
    }
  i=cmd_out();
  if (i<0) return (i);
  if (!new_drive)
    {
      response_count=16;
      i=xx_ReadPacket();
      if (i<0) return (i);
    }
  DS[d].UPC_ctl_adr=0;
  if (new_drive) i=0;
  else i=2;
  if ((infobuf[i]&0x80)!=0)
    {
      convert_UPC(&infobuf[i]);
      DS[d].UPC_ctl_adr &= 0xF0;
      DS[d].UPC_ctl_adr |= 0x02;
    }
  DS[d].diskstate_flags |= upc_bit;
  return (0);
}
/*==========================================================================*/
static int yy_CheckMultiSession(void)
{
  int i;

  DS[d].diskstate_flags &= ~multisession_bit;
  DS[d].f_multisession=0;
  clr_cmdbuf();
  if (new_drive)
    {
      drvcmd[0]=0x8D;
      response_count=6;
      flags_cmd_out=f_putcmd|f_ResponseStatus|f_obey_p_check;
      i=cmd_out();
      if (i<0) return (i);
      if ((infobuf[0]&0x80)!=0)
	{
	  DPRINTF((DBG_MUL,"SBPCD: MultiSession CD detected: %02X %02X %02X %02X %02X %02X\n",
                         infobuf[0], infobuf[1], infobuf[2],
		         infobuf[3], infobuf[4], infobuf[5]));
	  DS[d].f_multisession=1;
	  DS[d].lba_multi=msf2blk(make32(make16(0,infobuf[1]),
                                   make16(infobuf[2],infobuf[3])));
	}
    }
  DS[d].diskstate_flags |= multisession_bit;
  return (0);
}
/*==========================================================================*/
static void check_datarate(void)
{
#ifdef CDMKE
  int i=0;

  timed_out=0;
  datarate=0;

  /* set a timer to make (timed_out!=0) after 1.1 seconds */

  DPRINTF((DBG_TIM,"SBPCD: timer started (110).\n"));
  sti(); /* to avoid possible "printf" bug */

  SET_TIMER(mark_timeout,110);
  do
    {
      i=inb(CDi_status);
      datarate++;

#if 00000
      if (datarate>0x0FFFFFFF) break;
#endif 00000

    }
  while (!timed_out); /* originally looping for 1.1 seconds */
  CLEAR_TIMER;
  DPRINTF((DBG_TIM,"SBPCD: datarate: %d\n", datarate));
  if (datarate<65536) datarate=65536;

  maxtim16=datarate*16;
  maxtim04=datarate*4;
  maxtim02=datarate*2;
  maxtim_8=datarate/32;
#if MANY_SESSION
  maxtim_data=datarate/100;
#else
  maxtim_data=datarate/300;
#endif MANY_SESSION
  DPRINTF((DBG_TIM,"SBPCD: maxtim_8 %d, maxtim_data %d.\n",
	   maxtim_8, maxtim_data));
#endif CDMKE
}
/*==========================================================================*/
static int check_version(void)
{
  int i, j;

  /* clear any pending error state */
  clr_cmdbuf();
  drvcmd[0]=0x82;
  response_count=9;
  flags_cmd_out=f_putcmd;
  cmd_out();

  /* read drive version */
  clr_cmdbuf();
  for (i=0;i<12;i++) infobuf[i]=0;
  drvcmd[0]=0x83;
  response_count=12;
  flags_cmd_out=f_putcmd;
  i=cmd_out();
  if (i<0) DPRINTF((DBG_INI,"SBPCD: cmd_83 returns %d\n",i));

  DPRINTF((DBG_INI,"SBPCD: infobuf = \""));
  for (i=0;i<12;i++) DPRINTF((DBG_INI,"%c",infobuf[i]));
  DPRINTF((DBG_INI,"\"\n"));

  for (i=0;i<4;i++) if (infobuf[i]!=drive_family[i]) break;
  if (i==4)
    {
      DS[d].drive_model[0]=infobuf[i++];
      DS[d].drive_model[1]=infobuf[i++];
      DS[d].drive_model[2]='-';
      DS[d].drive_model[3]='x';
      DS[d].drv_type=drv_new;
    }
  else
    {
      for (i=0;i<8;i++) if (infobuf[i]!=drive_vendor[i]) break;
      if (i!=8) return (-1);
      DS[d].drive_model[0]='2';
      DS[d].drive_model[1]='x';
      DS[d].drive_model[2]='-';
      DS[d].drive_model[3]='x';
      DS[d].drv_type=drv_old;
    }
  for (j=0;j<4;j++) DS[d].firmware_version[j]=infobuf[i+j];
  j = (DS[d].firmware_version[0] & 0x0F) * 100 +
      (DS[d].firmware_version[2] & 0x0F) *10 +
      (DS[d].firmware_version[3] & 0x0F);
  if (new_drive)
    {
      if (j<100) DS[d].drv_type=drv_099;
      else DS[d].drv_type=drv_100;
    }
  else if (j<200) DS[d].drv_type=drv_199;
  else if (j<201) DS[d].drv_type=drv_200;
  else if (j<210) DS[d].drv_type=drv_201;
  else if (j<211) DS[d].drv_type=drv_210;
  else if (j<300) DS[d].drv_type=drv_211;
  else DS[d].drv_type=drv_300;
  return (0);
}
/*==========================================================================*/
static int switch_drive(int num)
{
  int i;

  d=num;

  i=num;
  if (sbpro_type) i=(i&0x01)<<1|(i&0x02)>>1;
  OUT(CDo_enable,i);
  DPRINTF((DBG_DID,"SBPCD: switch_drive: drive %d activated.\n",DS[d].drv_minor));
  return (0);
}
/*==========================================================================*/
/*
 * probe for the presence of drives on the selected controller
 */
static int check_drives(void)
{
  int i, j;
  char *printk_header="";

  DPRINTF((DBG_INI,"SBPCD: check_drives entered.\n"));

  ndrives=0;
  for (j=0;j<NR_SBPCD;j++)
    {
      DS[j].drv_minor=j;
      switch_drive(j);
      DPRINTF((DBG_ID,"SBPCD: check_drives: drive %d activated.\n",j));
      i=check_version();
      DPRINTF((DBG_ID,"SBPCD: check_version returns %d.\n",i));
      if (i>=0)
	{
	  ndrives++;
	  DS[d].drv_options=drv_pattern[j];
	  if (!new_drive) DS[d].drv_options&=~(speed_auto|speed_300|speed_150);
	  printk("%sDrive %d: %s%.4s (%.4s)\n", printk_header,
		 DS[d].drv_minor,
                 drive_family,
                 DS[d].drive_model,
                 DS[d].firmware_version);
	  printk_header="       - ";
	}
      else DS[d].drv_minor=-1;
    }
  if (ndrives==0) return (-1);
  return (0);
}
/*==========================================================================*/
#if 000
static void timewait(void)
{
  int i;
  for (i=0; i<65500; i++);
}
#endif 000
/*==========================================================================*/
#if FUTURE
/*
 *  obtain if requested service disturbs current audio state
 */            
static int obey_audio_state(u_char audio_state, u_char func,u_char subfunc)
{
  switch (audio_state)                   /* audio status from controller  */
    {
    case aud_11: /* "audio play in progress" */
    case audx11:
      switch (func)                      /* DOS command code */
	{
	case cmd_07: /* input flush  */
	case cmd_0d: /* open device  */
	case cmd_0e: /* close device */
	case cmd_0c: /* ioctl output */
	  return (1);
	case cmd_03: /* ioctl input  */
	  switch (subfunc)
	    /* DOS ioctl input subfunction */
	    {
	    case cxi_00:
	    case cxi_06:
	    case cxi_09:
	      return (1);
	    default:
	      return (ERROR15);
	    }
	  return (1);
	default:
	  return (ERROR15);
	}
      return (1);
    case aud_12:                  /* "audio play paused"      */
    case audx12:
      return (1);
    default:
      return (2);
    }
}
#endif FUTURE
/*==========================================================================*/
/* allowed is only
 * ioctl_o, flush_input, open_device, close_device, 
 * tell_address, tell_volume, tell_capabiliti,
 * tell_framesize, tell_CD_changed, tell_audio_posi
 */
static int check_allowed1(u_char func1, u_char func2)
{
#if 000
  if (func1==ioctl_o) return (0);
  if (func1==read_long) return (-1);
  if (func1==read_long_prefetch) return (-1);
  if (func1==seek) return (-1);
  if (func1==audio_play) return (-1);
  if (func1==audio_pause) return (-1);
  if (func1==audio_resume) return (-1);
  if (func1!=ioctl_i) return (0);
  if (func2==tell_SubQ_run_tot) return (-1);
  if (func2==tell_cdsize) return (-1);
  if (func2==tell_TocDescrip) return (-1);
  if (func2==tell_TocEntry) return (-1);
  if (func2==tell_subQ_info) return (-1);
  if (new_drive) if (func2==tell_SubChanInfo) return (-1);
  if (func2==tell_UPC) return (-1);
#else
  return (0);
#endif 000
}
/*==========================================================================*/
static int check_allowed2(u_char func1, u_char func2)
{
#if 000
  if (func1==read_long) return (-1);
  if (func1==read_long_prefetch) return (-1);
  if (func1==seek) return (-1);
  if (func1==audio_play) return (-1);
  if (func1!=ioctl_o) return (0);
  if (new_drive)
    {
      if (func2==EjectDisk) return (-1);
      if (func2==CloseTray) return (-1);
    }
#else
  return (0);
#endif 000
}
/*==========================================================================*/
static int check_allowed3(u_char func1, u_char func2)
{
#if 000
  if (func1==ioctl_i)
    {
      if (func2==tell_address) return (0);
      if (func2==tell_capabiliti) return (0);
      if (func2==tell_CD_changed) return (0);
      if (!new_drive) if (func2==tell_SubChanInfo) return (0);
      return (-1);
    }
  if (func1==ioctl_o)
    {
      if (func2==DriveReset) return (0);
      if (!new_drive)
	{
	  if (func2==EjectDisk) return (0);
	  if (func2==LockDoor) return (0);
	  if (func2==CloseTray) return (0);
	}
      return (-1);
    }
  if (func1==flush_input) return (-1);
  if (func1==read_long) return (-1);
  if (func1==read_long_prefetch) return (-1);
  if (func1==seek) return (-1);
  if (func1==audio_play) return (-1);
  if (func1==audio_pause) return (-1);
  if (func1==audio_resume) return (-1);
#else
  return (0);
#endif 000
}
/*==========================================================================*/
static int seek_pos_audio_end(void)
{
  int i;

  i=msf2blk(DS[d].pos_audio_end)-1;
  if (i<0) return (-1);
  i=xx_Seek(i,0);
  return (i);
}
/*==========================================================================*/
static int ReadToC(void)
{
  int i, j;
  DS[d].diskstate_flags &= ~toc_bit;
  DS[d].ored_ctl_adr=0;
  for (j=DS[d].n_first_track;j<=DS[d].n_last_track;j++)
    {
      i=xx_ReadTocEntry(j);
      if (i<0) return (i);
      DS[d].TocBuffer[j].nixbyte=DS[d].TocEnt_nixbyte;
      DS[d].TocBuffer[j].ctl_adr=DS[d].TocEnt_ctl_adr;
      DS[d].TocBuffer[j].number=DS[d].TocEnt_number;
      DS[d].TocBuffer[j].format=DS[d].TocEnt_format;
      DS[d].TocBuffer[j].address=DS[d].TocEnt_address;
      DS[d].ored_ctl_adr |= DS[d].TocEnt_ctl_adr;
    }
/* fake entry for LeadOut Track */
  DS[d].TocBuffer[j].nixbyte=0;
  DS[d].TocBuffer[j].ctl_adr=0;
  DS[d].TocBuffer[j].number=0;
  DS[d].TocBuffer[j].format=0;
  DS[d].TocBuffer[j].address=DS[d].size_msf;

  DS[d].diskstate_flags |= toc_bit;
  return (0);
}
/*==========================================================================*/
static int DiskInfo(void)
{
  int i;

  i=SetSpeed();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: first SetSpeed returns %d\n", i));
      i=SetSpeed();
      if (i<0)
	{
	  DPRINTF((DBG_INF,"SBPCD: DiskInfo: second SetSpeed returns %d\n", i));
	  return (i);
	}
    }
  i=xx_ModeSense();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: first xx_ModeSense returns %d\n", i));
      i=xx_ModeSense();
      if (i<0)
	{
	  DPRINTF((DBG_INF,"SBPCD: DiskInfo: second xx_ModeSense returns %d\n", i));
	  return (i);
	}
      return (i);
    }
  i=xx_ReadCapacity();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: first ReadCapacity returns %d\n", i));
      i=xx_ReadCapacity();
      if (i<0)
	{
	  DPRINTF((DBG_INF,"SBPCD: DiskInfo: second ReadCapacity returns %d\n", i));
	  return (i);
	}
      return (i);
    }
  i=xx_ReadTocDescr();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: ReadTocDescr returns %d\n", i));
      return (i);
    }
  i=ReadToC();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: ReadToC returns %d\n", i));
      return (i);
    }
  i=yy_CheckMultiSession();
  if (i<0)
    {
      DPRINTF((DBG_INF,"SBPCD: DiskInfo: yy_CheckMultiSession returns %d\n", i));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久疯狂做爰流白浆xx| 久久久噜噜噜久久中文字幕色伊伊| 欧洲av在线精品| 亚洲成人综合网站| 欧美日韩国产首页在线观看| 青青青伊人色综合久久| 一区二区三区日韩精品| 美日韩一级片在线观看| 日韩欧美成人激情| 国产成人亚洲综合a∨婷婷 | 日本一区二区在线不卡| 伦理电影国产精品| 蜜臀久久久99精品久久久久久| 日韩国产欧美三级| 91.麻豆视频| 久久爱www久久做| 国产日韩欧美激情| 欧美影视一区二区三区| 天天av天天翘天天综合网色鬼国产| xf在线a精品一区二区视频网站| 午夜成人免费电影| 亚洲综合在线电影| www.99精品| 日韩精品中文字幕一区二区三区| 自拍偷在线精品自拍偷无码专区 | 色综合久久中文综合久久97| 欧美不卡激情三级在线观看| 亚洲成人黄色小说| 色呦呦一区二区三区| 国产欧美一区二区精品性色超碰| 老司机免费视频一区二区三区| 欧洲国内综合视频| 一区二区三区在线观看视频| 99在线视频精品| 亚洲一级二级三级在线免费观看| 成人免费毛片app| 久久久久国产精品免费免费搜索| 精品在线亚洲视频| 精品日韩欧美一区二区| 久久99久久99小草精品免视看| 日韩一区二区三区观看| 美国毛片一区二区| 精品少妇一区二区三区| 捆绑调教美女网站视频一区| 精品乱码亚洲一区二区不卡| 激情成人午夜视频| 国产欧美一区二区在线观看| 成人深夜在线观看| 自拍视频在线观看一区二区| 欧美影片第一页| 日韩和欧美一区二区三区| 日韩视频在线一区二区| 蜜臀久久99精品久久久画质超高清| 日韩午夜激情av| 国产一区美女在线| 国产精品久久久久影视| 色婷婷综合久久| 亚洲www啪成人一区二区麻豆| 91精品国产一区二区三区| 激情五月婷婷综合| 中文字幕欧美激情| 欧美日韩精品系列| 狠狠色狠狠色综合系列| 国产精品丝袜在线| 在线观看亚洲一区| 久久se精品一区精品二区| 国产欧美精品在线观看| 91久久奴性调教| 免费成人美女在线观看.| 国产日产精品1区| 欧美丝袜自拍制服另类| 国内精品免费**视频| 亚洲蜜臀av乱码久久精品| 欧美日韩亚州综合| 成人一级片网址| 亚洲成在线观看| 久久精品人人爽人人爽| 欧美亚洲动漫另类| 国产中文字幕一区| 一级女性全黄久久生活片免费| 日韩女优制服丝袜电影| 99久久99久久精品国产片果冻| 爽好久久久欧美精品| 国产精品色哟哟网站| 欧美丰满少妇xxxbbb| 99免费精品视频| 麻豆精品视频在线观看视频| 亚洲欧美日韩一区二区| 精品99999| 精品视频在线免费观看| 国产二区国产一区在线观看| 婷婷六月综合亚洲| 一区二区三区产品免费精品久久75| 欧美xxxxxxxx| 欧美精品三级日韩久久| 日本高清不卡视频| 成人午夜av电影| 蜜臀久久久久久久| 亚洲电影一区二区三区| 国产精品久久久久久久久搜平片| 欧美tickling挠脚心丨vk| 欧美日韩精品系列| 欧美系列在线观看| 欧美视频在线播放| 91国产丝袜在线播放| 99国产精品国产精品久久| 国产成人一区二区精品非洲| 欧美日韩免费视频| 99视频一区二区三区| 国模一区二区三区白浆| 青青国产91久久久久久| 婷婷中文字幕一区三区| 爽好多水快深点欧美视频| 亚洲h精品动漫在线观看| 亚洲一区免费视频| 亚洲国产日日夜夜| 亚洲高清中文字幕| 性做久久久久久久免费看| 亚洲妇女屁股眼交7| 偷窥国产亚洲免费视频| 日本三级韩国三级欧美三级| 亚洲v中文字幕| 日本欧美韩国一区三区| 免费高清视频精品| 美女在线一区二区| 国产一区二区三区久久久| 国产乱人伦偷精品视频免下载| 日本不卡一区二区三区高清视频| 婷婷夜色潮精品综合在线| 免费观看在线综合| 国产在线精品国自产拍免费| 国产乱码精品1区2区3区| 高清国产一区二区| av亚洲精华国产精华精华| 色成年激情久久综合| 欧美天天综合网| 91精品综合久久久久久| 337p粉嫩大胆噜噜噜噜噜91av | 91丨九色丨黑人外教| 色婷婷综合久久久中文字幕| 欧美亚洲国产一区在线观看网站| 欧美日韩综合在线免费观看| 欧美一区二区二区| 国产情人综合久久777777| 亚洲精品久久久久久国产精华液| 亚洲五码中文字幕| 精彩视频一区二区| 91无套直看片红桃| 欧美精品日韩综合在线| 国产视频一区二区在线| 一区二区三国产精华液| 97久久精品人人做人人爽50路| 国产乱子伦视频一区二区三区| 欧美三级日韩在线| 日韩免费观看高清完整版在线观看| 欧美色倩网站大全免费| 日韩精品影音先锋| 国产欧美在线观看一区| 亚洲色图欧美在线| 麻豆国产精品官网| 99精品视频在线观看| 91精品国产综合久久久蜜臀图片| 国产精品家庭影院| 欧美日韩精品一区二区天天拍小说| 国产v综合v亚洲欧| 欧美日韩国产综合一区二区| 精品国产乱码久久久久久久| 亚洲欧美另类综合偷拍| 另类专区欧美蜜桃臀第一页| 色综合天天综合在线视频| 欧美成人综合网站| 一区二区三区欧美日韩| 国产精品白丝jk白祙喷水网站| 欧美视频中文一区二区三区在线观看| 久久免费的精品国产v∧| 亚洲3atv精品一区二区三区| 国产剧情一区二区三区| 欧美福利一区二区| 亚洲免费观看高清完整版在线| 九色porny丨国产精品| 欧美性生活一区| 亚洲美女免费在线| 懂色av一区二区三区免费观看 | 午夜视频在线观看一区二区三区| 国产v日产∨综合v精品视频| 精品国免费一区二区三区| 亚洲成人免费电影| 91在线视频播放| 国产欧美视频在线观看| 精品一区二区三区视频在线观看| 欧美日韩亚洲不卡| 亚洲午夜av在线| 色噜噜偷拍精品综合在线| 久久精品人人爽人人爽| 国产一区二区三区美女| 欧美刺激午夜性久久久久久久| 五月婷婷综合激情| 欧美三级韩国三级日本一级| 亚洲一区二区成人在线观看| 色综合久久88色综合天天|