⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bindings.c

📁 基于linux的DVD播放器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	if(disccomment) {	  free(disccomment);	}      }    }    if(DVDBookmarkSave(bm, 0) == -1) {      NOTE("%s", "BookmarkSave failed\n");    }    DVDBookmarkClose(bm);  }}void actionBookmarkRemove(void *data){  struct action_number *user = (struct action_number *)data;  DVDBookmark_t *bm;  unsigned char id[16];  int n;    if(DVDGetDiscID(nav, id) != DVD_E_Ok) {    NOTE("%s", "GetDiscID failed\n");    return;  }    if((bm = DVDBookmarkOpen(id, NULL, 0)) == NULL) {    if(errno != ENOENT) {      NOTE("%s", "BookmarkOpen failed: ");      perror("");    }    return;  }  n = DVDBookmarkGetNr(bm);  if(n == -1) {    NOTE("%s", "DVDBookmarkGetNr failed\n");  } else if(n > 0) {    if(user != NULL) {      if(user->valid && (user->nr < n) && (user->nr > 0)) {	n = user->nr;      }      user->valid = 0;    }    if(DVDBookmarkRemove(bm, n-1) != -1) {      if(DVDBookmarkSave(bm, 0) == -1) {	NOTE("%s", "BookmarkSave failed\n");      }    } else {      NOTE("%s", "DVDBookmarkRemove failed\n");    }  }    DVDBookmarkClose(bm);}void actionBookmarkRestore(void *data){  struct action_number *user = (struct action_number *)data;  DVDBookmark_t *bm;  unsigned char id[16];  char *state = NULL;  int n;  if(DVDGetDiscID(nav, id) != DVD_E_Ok) {    NOTE("%s", "GetDiscID failed\n");    return;  }    if((bm = DVDBookmarkOpen(id, NULL, 0)) == NULL) {    if(errno != ENOENT) {      NOTE("%s", "BookmarkOpen failed: ");      perror("");    }    return;  }  n = DVDBookmarkGetNr(bm);  if(n == -1) {    NOTE("%s", "DVDBookmarkGetNr failed\n");  } else if(n > 0) {    if(user != NULL) {      if(user->valid && (user->nr < n) && (user->nr > 0)) {	n = user->nr;      }      user->valid = 0;    }    if(DVDBookmarkGet(bm, n-1, &state, NULL, NULL, NULL) != -1) {      if(state) {	if(DVDSetState(nav, state) != DVD_E_Ok) {	  NOTE("%s", "DVDSetState failed\n");	}	free(state);      }    } else {      NOTE("%s", "BookmarkGet failed\n");    }  }  DVDBookmarkClose(bm);}void actionDigit(void *data){  struct timeval curtime;  long diff;    gettimeofday(&curtime, NULL);  diff = curtime.tv_sec - user_nr.timestamp.tv_sec;    if(!user_nr.valid || (digit_timeout && (diff > digit_timeout))) {    user_nr.nr = 0;  }    user_nr.timestamp = curtime;  user_nr.nr = user_nr.nr * 10 + *(uint8_t *)data;  user_nr.valid = 1;}void actionSkipForward(void *data){  struct action_number *user = (struct action_number *)data;  if(user != NULL) {    if((user->nr == 0) || (user->nr < 0)) {      skip_seconds = default_skip_seconds;    } else {      skip_seconds = user->nr;    }  }     DVDTimeSkip(nav, skip_seconds);}void actionSkipBackward(void *data){  struct action_number *user = (struct action_number *)data;  if(user != NULL) {    if((user->nr == 0) || (user->nr < 0)) {      skip_seconds = default_skip_seconds;    } else {      skip_seconds = user->nr;    }  }     DVDTimeSkip(nav, -skip_seconds);}void actionSaveScreenshot(void *data){  DVDSaveScreenshot(nav, ScreenshotModeWithoutSPU, NULL);}void actionSaveScreenshotWithSPU(void *data){  DVDSaveScreenshot(nav, ScreenshotModeWithSPU, NULL);}void do_number_action(void *vfun){  void (*number_action)(void *) = vfun;  struct timeval curtime;  long diff;  struct action_number *number = NULL;    gettimeofday(&curtime, NULL);  diff = curtime.tv_sec - user_nr.timestamp.tv_sec;    if(number_timeout && (diff > number_timeout)) {    user_nr.valid = 0;  }  if(user_nr.valid) {    number = &user_nr;  }  number_action(number);  user_nr.valid = 0;  }void do_action(void *fun){  void (*action)(void *) = fun;  user_nr.valid = 0;    action(NULL);}typedef struct {  PointerEventType event_type;  unsigned int button;  unsigned int modifier_mask;  void (*fun)(void *);} pointer_mapping_t;static unsigned int pointer_mappings_index = 0;//static unsigned int nr_pointer_mappings = 0;static pointer_mapping_t *pointer_mappings;typedef struct {  KeySym keysym;  void (*fun)(void *);  void *arg;} ks_map_t;static unsigned int ks_maps_index = 0;static unsigned int nr_ks_maps = 0;static ks_map_t *ks_maps;static const uint8_t digits[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };typedef struct {  char *str;  void (*fun)(void *);  void *ptr;} action_mapping_t;static action_mapping_t actions[] = {  { "Play", do_action, actionPlay },  { "PauseToggle", do_action, actionPauseToggle },  { "Stop", NULL, NULL },  { "FastForward", do_action, actionFastForward },  { "SlowForward", do_action, actionSlowForward },  { "Faster", do_action, actionFaster },  { "Slower", do_action, actionSlower },  { "NextPG", do_action, actionNextPG },  { "PrevPG", do_action, actionPrevPG },  { "UpperButton", do_action, actionUpperButtonSelect },  { "LowerButton", do_action, actionLowerButtonSelect },  { "LeftButton", do_action, actionLeftButtonSelect },  { "RightButton", do_action, actionRightButtonSelect },  { "ButtonActivate", do_number_action, actionButtonActivate },  { "TitleMenu", do_action, actionMenuCallTitle },  { "RootMenu", do_action, actionMenuCallRoot },  { "AudioMenu", do_action, actionMenuCallAudio },  { "AngleMenu", do_action, actionMenuCallAngle },  { "PTTMenu", do_action, actionMenuCallPTT },  { "SubtitleMenu", do_action, actionMenuCallSubpicture },  { "Resume", do_action, actionResume },  { "FullScreenToggle", do_action, actionFullScreenToggle },  { "SubtitleToggle", do_action, actionSubpictureToggle },  { "Quit", do_action, actionQuit },  { "BookmarkAdd", do_action, actionBookmarkAdd },  { "BookmarkRemove", do_number_action, actionBookmarkRemove },  { "BookmarkRestore", do_number_action, actionBookmarkRestore },  { "DigitZero", actionDigit, (void *)&digits[0] },  { "DigitOne",  actionDigit, (void *)&digits[1] },  { "DigitTwo",  actionDigit, (void *)&digits[2] },  { "DigitThree",actionDigit, (void *)&digits[3] },  { "DigitFour", actionDigit, (void *)&digits[4] },  { "DigitFive", actionDigit, (void *)&digits[5] },  { "DigitSix",  actionDigit, (void *)&digits[6] },  { "DigitSeven",actionDigit, (void *)&digits[7] },  { "DigitEight",actionDigit, (void *)&digits[8] },  { "DigitNine", actionDigit, (void *)&digits[9] },  { "SkipForward", do_number_action, actionSkipForward },  { "SkipBackward", do_number_action, actionSkipBackward },  { "SaveScreenshot", do_action, actionSaveScreenshot },  { "SaveScreenshotWithSPU", do_action, actionSaveScreenshotWithSPU },  { NULL, NULL }};void do_pointer_action(pointer_event_t *p_ev){  int n;    for(n = 0; n < pointer_mappings_index; n++) {    if((pointer_mappings[n].event_type == p_ev->type) &&       (pointer_mappings[n].modifier_mask == p_ev->modifier_mask)) {      if(pointer_mappings[n].fun != NULL) {	pointer_mappings[n].fun(p_ev);      }      return;    }  }    return;}void do_keysym_action(KeySym keysym){  int n;  for(n = 0; n < ks_maps_index; n++) {    if(ks_maps[n].keysym == keysym) {      if(ks_maps[n].fun != NULL) {	ks_maps[n].fun(ks_maps[n].arg);      }      return;    }  }  return;}void remove_keysym_binding(KeySym keysym){  int n;    for(n = 0; n < ks_maps_index; n++) {    if(ks_maps[n].keysym == keysym) {      ks_maps[n].keysym = NoSymbol;      ks_maps[n].fun = NULL;      ks_maps[n].arg = NULL;      return;    }  }}void add_keysym_binding(KeySym keysym, void(*fun)(void *), void *arg){  int n;    for(n = 0; n < ks_maps_index; n++) {    if(ks_maps[n].keysym == keysym) {      ks_maps[n].fun = fun;      ks_maps[n].arg = arg;      return;    }  }  if(ks_maps_index >= nr_ks_maps) {    nr_ks_maps+=32;    ks_maps = (ks_map_t *)realloc(ks_maps, sizeof(ks_map_t)*nr_ks_maps);  }    ks_maps[ks_maps_index].keysym = keysym;  ks_maps[ks_maps_index].fun = fun;  ks_maps[ks_maps_index].arg = arg;    ks_maps_index++;    return;}  void add_keybinding(char *key, char *action){  KeySym keysym;  int n = 0;    keysym = XStringToKeysym(key);    if(keysym == NoSymbol) {    WARNING("add_keybinding(): '%s' not a valid keysym\n", key);    return;  }    if(!strcmp("NoAction", action)) {    remove_keysym_binding(keysym);    return;  }      for(n = 0; actions[n].str != NULL; n++) {    if(!strcmp(actions[n].str, action)) {      if(actions[n].fun != NULL) {	add_keysym_binding(keysym, actions[n].fun, actions[n].ptr);      }      return;    }  }    WARNING("add_keybinding(): No such action: '%s'\n", action);    return;}/*void add_pointerbinding(char *, char *action){  KeySym keysym;  int n = 0;    keysym = XStringToKeysym(key);    if(keysym == NoSymbol) {  WARNING("add_keybinding(): '%s' not a valid keysym\n", key);  return;  }    if(!strcmp("NoAction", action)) {    remove_keysym_binding(keysym);    return;  }      for(n = 0; actions[n].str != NULL; n++) {    if(!strcmp(actions[n].str, action)) {      if(actions[n].fun != NULL) {	add_keysym_binding(keysym, actions[n].fun);      }      return;    }  }    WARNING("add_keybinding(): No such action: '%s'\n", action);    return;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -