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

📄 xaw_i.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 5 页
字号:
    a_pipe_write("D 1");  } else {    offPlayButton();    offPauseButton();    a_pipe_write("D 2");  }  toggleMark(file_menu[ID_SHUFFLE-100].widget, file_menu[ID_SHUFFLE-100].id);}static void menuCB(Widget w,XtPointer data,XtPointer dummy) {  onPlayOffPause();  sprintf(local_buf,"L %d",((int)data)+1);  a_pipe_write(local_buf);}static void setVolbar(int val) {  char s[8];  float thumb;  amplitude = (val > MAXVOLUME)? MAXVOLUME:val;  sprintf(s, "%d", val);  XtVaSetValues(vol_l, XtNlabel, s, NULL);  sprintf(s, "V %03d\n", val);  a_pipe_write(s);  thumb = (float)val / (float)MAXVOLUME;  sprintf(s, "%d", val);  XtVaSetValues(vol_l, XtNlabel, s, NULL);  if (sizeof(thumb) > sizeof(XtArgVal)) {    XtVaSetValues(vol_bar, XtNtopOfThumb, &thumb, NULL);  } else {    XtArgVal *l_thumb = (XtArgVal *) &thumb;    XtVaSetValues(vol_bar, XtNtopOfThumb,*l_thumb, NULL);  }}static void volsetCB(Widget w,XtPointer data,XtPointer call_data) {  float percent = *(float*)call_data;  int val = (float)(MAXVOLUME * percent);  if (amplitude == val) return;  setVolbar(val);}static void volupdownCB(Widget w,XtPointer data,XtPointer diff) {  int i = ((int)diff > 0)? (-10):10;  i += amplitude;  setVolbar(i);}static void volupdownAction(Widget w,XEvent *e,String *v,Cardinal *n) {  int i = atoi(*v);  i += amplitude;  setVolbar(i);}#if 0 /* Not used */static void tunesetCB(Widget w,XtPointer data,XtPointer call_data){  static int tmpval;  char s[16];  float percent = *(float*)call_data;  int value = (float)(total_time * percent);  float thumb, l_thumb;  if (tmpval == value) return;  if (curr_time > total_time) curr_time = total_time;  curr_time = tmpval = value;  l_thumb = thumb = (float)curr_time / (float)total_time;  snprintf(s,sizeof(s), "%2d:%02d", tmpval / 60, tmpval % 60);  XtVaSetValues(tune_l0, XtNlabel, s, NULL);  sprintf(s, "T %d\n", tmpval);  a_pipe_write(s);}#endifstatic void tunesetAction(Widget w,XEvent *e,String *v,Cardinal *n) {  static float tmpval;  char s[16];  int value;  float l_thumb;  XtVaGetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL);  if (tmpval == l_thumb) return;  tmpval = l_thumb;  value = (int)(l_thumb * total_time);  snprintf(s,sizeof(s), "%2d:%02d", curr_time / 60, curr_time % 60);  XtVaSetValues(tune_l0, XtNlabel, s, NULL);  XtVaSetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL);  sprintf(s, "T %d\n", value);  a_pipe_write(s);}static void tuneslideCB(Widget w,XtPointer data,XtPointer diff) {  char s[16];  sprintf(s, "T %d\n", curr_time+ (int)diff);  a_pipe_write(s);}static void tuneslideAction(Widget w,XEvent *e,String *v,Cardinal *n) {  char s[16];  float l_thumb;  XtVaGetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL);  sprintf(s, "T %d\n", (int)(total_time * l_thumb));  a_pipe_write(s);}/*ARGSUSED*/static void resizeAction(Widget w,XEvent *e,String *v,Cardinal *n) {  Dimension w1,w2,h1,h2;  Position y1;  int i,tmp,tmp2,tmp3;  XtVaGetValues(toplevel,XtNwidth,&w1,XtNheight,&h1,NULL);  w2 = w1 -8;  if(w2>TRACEVPORT_WIDTH) w2 = TRACEVPORT_WIDTH;  XtVaGetValues(lyric_t,XtNheight,&h2,NULL);  XtResizeWidget(lyric_t,w2-2,h2,0);  i= 0; tmp = 10;  while (tmp > 0) {    i++; tmp -= (int)(w2) / 36;  }  XtVaSetValues(lyric_t,XtNborderWidth,1,NULL);  XtVaSetValues(b_box,XtNheight,i*40,NULL);  XtResizeWidget(b_box,w2,i*40,0);  if(ctl->trace_playing) {    XtVaGetValues(trace_vport,XtNy,&y1,NULL);    XtResizeWidget(trace_vport,w2,((h1-y1>TRACE_HEIGHT+12)? TRACE_HEIGHT+12:h1-y1),0);  }  XtVaGetValues(v_box,XtNheight,&h2,NULL);  w2 = ((w1 < TRACE_WIDTH_SHORT)? w1:TRACE_WIDTH_SHORT);    /* new v_box width */  tmp = XTextWidth(app_resources.volume_font,"Volume ",7)+8; /* vol_l width */  XtVaSetValues(vol_l0,XtNwidth,tmp,NULL);  XtVaSetValues(v_box,XtNwidth,w2,NULL);  tmp2 = w2 -tmp - XTextWidth(app_resources.volume_font,"000",3) -38;  tmp3 = w2 -XTextWidth(app_resources.volume_font,"/ 99:59",7)    - XTextWidth(app_resources.volume_font,"000",3) -45;  XtResizeWidget(v_box,w2,h2,0);  XtVaGetValues(vol_bar,XtNheight,&h2,NULL);  XtVaSetValues(vol_bar,XtNwidth,tmp2,NULL);  XtVaSetValues(tune_bar,XtNwidth,tmp3,NULL);  XtResizeWidget(vol_bar,tmp2,h2,0);  XtResizeWidget(tune_bar,tmp3,h2,0);  XSync(disp, False);  usleep(10000);}#ifndef WIDGET_IS_LABEL_WIDGETvoid a_print_text(Widget w, char *st) {  XawTextPosition pos;  XawTextBlock tb;  st = strcat(st, "\n");  pos = XawTextGetInsertionPoint(w);  tb.firstPos = 0;  tb.length = strlen(st);  tb.ptr = st;  tb.format = FMT8BIT;  XawTextReplace(w, pos, pos, &tb);  XawTextSetInsertionPoint(w, pos + tb.length);}#elsevoid a_print_text(Widget w, char *st) {  XtVaSetValues(w,XtNlabel,st,NULL);}#endif /* !WIDGET_IS_LABEL_WIDGET *//*ARGSUSED*/static void popupLoad(Widget w,XtPointer client_data,XtPointer call_data) {#define DIALOG_HEIGHT 400  Position popup_x, popup_y, top_x, top_y;  Dimension top_width;  XtVaGetValues(toplevel, XtNx,&top_x,XtNy,&top_y,XtNwidth,&top_width,NULL);  popup_x=top_x+ 20;  popup_y=top_y+ 72;  top_width += 100;  if(popup_x+top_width > root_width) popup_x = root_width -top_width -20;  if(popup_y+DIALOG_HEIGHT > root_height) popup_y = root_height -DIALOG_HEIGHT -20;  XtVaSetValues(popup_load, XtNx,popup_x,XtNy,popup_y,XtNwidth,top_width,                XtNheight,DIALOG_HEIGHT,NULL);  XtRealizeWidget(popup_load);  XtPopup(popup_load,(XtGrabKind)XtGrabNone);  top_width -= 4;  XtVaSetValues(load_vport,XtNwidth,top_width,NULL);  XawTextSetInsertionPoint(load_t,(XawTextPosition)(strlen(basepath)));}static void popdownLoad(Widget w,XtPointer s,XtPointer data) {  char *p, *p2;  DirPath full;  char local_buf[300],tmp[PATH_MAX];#ifndef	ORIGINAL  int	Aflag = 0; /* RAKK/HIOENS: adding All files in directory */#endif	/*RAKK/HIOENS*/  /* tricky way for both use of action and callback */  if (s != NULL && data == NULL){    if(*(char *)s == 'A') {      snprintf(tmp,sizeof(tmp),"%s%c",basepath,'/');      p = tmp;#ifndef	ORIGINAL      Aflag = 1;#endif	/*RAKK/HIOENS*/    } else {      p = XawDialogGetValueString(load_d);    }    if (NULL != (p2 = expandDir(p, &full)))      p = p2;    if(IsEffectiveFile(p)) {#ifndef	ORIGINAL      if(Aflag == 1) strcat(p,"/");#endif	/*RAKK/HIOENS*/      snprintf(local_buf,sizeof(local_buf),"X %s\n",p);      a_pipe_write(local_buf);    }  }  XtPopdown(popup_load);}static void toggleMark(Widget w,int id) {  file_menu[id-100].bmflag ^= True;  XtVaSetValues(w,XtNleftBitmap,                ((file_menu[id-100].bmflag)? check_mark:None),NULL);}static void filemenuAction(Widget w,XEvent *e,String *v,Cardinal *n) {  int i;  if(e == NULL)    i= ID_HIDETXT;  else    i= atoi(*v);  if(!(ctl->trace_playing) && i == ID_HIDETRACE) i= ID_HIDETXT;  filemenuCB(file_menu[i-100].widget,&file_menu[i-100].id,NULL);}static void filemenuCB(Widget w,XtPointer id_data, XtPointer data) {  int *id = (int *)id_data;  Dimension w1,h1,w2,h2,tmp;  switch (*id) {    case ID_LOAD:      popupLoad(w,NULL,NULL);      break;    case ID_AUTOSTART:      toggleMark(w,*id);      break;    case ID_AUTOQUIT:      toggleMark(w,*id);      a_pipe_write("q");      break;    case ID_HIDETRACE:      if(ctl->trace_playing) {        XtVaGetValues(toplevel,XtNheight,&h1,XtNwidth,&w1,NULL);        if(XtIsManaged(trace_vport)) {          tmp = trace_height + (XtIsManaged(lyric_t) ? 0:lyric_height);          XtUnmanageChild(trace_vport);          XtMakeResizeRequest(toplevel,w1,base_height-tmp,&w2,&h2);        } else {          XtManageChild(trace_vport);          XtVaSetValues(trace_vport,XtNfromVert,                        (XtIsManaged(lyric_t) ? lyric_t:t_box),NULL);          XtMakeResizeRequest(toplevel,w1,h1+trace_height,&w2,&h2);          XtVaSetValues(trace_vport,XtNheight,trace_height,NULL);        }        toggleMark(w,*id);      }      break;    case ID_HIDETXT:      XtVaGetValues(toplevel,XtNheight,&h1,XtNwidth,&w1,NULL);      if(XtIsManaged(lyric_t)) {        if(ctl->trace_playing) {          tmp = lyric_height + (XtIsManaged(trace_vport) ? 0:trace_height);        } else {          tmp = lyric_height;        }        XtUnmanageChild(lyric_t);        if(ctl->trace_playing && XtIsManaged(trace_vport))          XtVaSetValues(trace_vport,XtNfromVert,t_box,NULL);        XtMakeResizeRequest(toplevel,w1,base_height-tmp,&w2,&h2);      } else {        XtManageChild(lyric_t);        if(ctl->trace_playing && XtIsManaged(trace_vport)) {          XtVaSetValues(trace_vport,XtNfromVert,lyric_t,NULL);        }        XtVaSetValues(lyric_t,XtNheight,lyric_height,NULL);        XtMakeResizeRequest(toplevel,w1,h1+lyric_height,&w2,&h2);      }      toggleMark(w,*id);      break;    case ID_SAVECONFIG:      a_saveconfig(dotfile);      break;    case ID_SHUFFLE:      randomAction(NULL,NULL,NULL,NULL);      break;    case ID_REPEAT:      repeatAction(NULL,NULL,NULL,NULL);      break;    case ID_OPTIONS:      optionspopupCB(w,NULL,NULL);      break;        case ID_FILELIST:      flistpopupCB(w,NULL,NULL);      break;        case ID_ABOUT:      aboutCB(w,NULL,NULL);      break;    case ID_QUIT:      quitCB(w,NULL,NULL);      break;      }}#ifdef WIDGET_IS_LABEL_WIDGETstatic void a_print_msg(Widget w){    int i, msglen;    a_pipe_nread((char *)&msglen, sizeof(int));    while(msglen > 0)    {    i = msglen;    if(i > sizeof(local_buf)-1)        i = sizeof(local_buf)-1;    a_pipe_nread(local_buf, i);    local_buf[i] = '\0';    XtVaSetValues(w,XtNlabel,local_buf,NULL);    msglen -= i;    }}#elsestatic void a_print_msg(Widget w){    int i, msglen;    XawTextPosition pos;    XawTextBlock tb;    tb.firstPos = 0;    tb.ptr = local_buf;    tb.format = FMT8BIT;    pos = XawTextGetInsertionPoint(w);    a_pipe_nread((char *)&msglen, sizeof(int));    while(msglen > 0)    {        i = msglen;        if(i > sizeof(local_buf))            i = sizeof(local_buf);        a_pipe_nread(local_buf, i);        tb.length = i;        XawTextReplace(w, pos, pos, &tb);        pos += i;        XawTextSetInsertionPoint(w, pos);        msglen -= i;    }}#endif /* WIDGET_IS_LABEL_WIDGET */#define DELTA_VEL       32static void ctl_channel_note(int ch, int note, int velocity) {    if(!ctl->trace_playing) return;  if (velocity == 0) {    if (note == Panel->cnote[ch])           Panel->v_flags[ch] = FLAG_NOTE_OFF;    Panel->cvel[ch] = 0;  } else if (velocity > Panel->cvel[ch]) {    Panel->cvel[ch] = velocity;    Panel->cnote[ch] = note;    Panel->ctotal[ch] = velocity * Panel->channel[ch].volume *      Panel->channel[ch].expression / (127*127);    Panel->v_flags[ch] = FLAG_NOTE_ON;  }}/*ARGSUSED*/static void handle_input(XtPointer data,int *source,XtInputId *id) {  char s[16], c;  int i=0, n, ch, note;  float thumb;  char **pp;  a_pipe_read(local_buf,sizeof(local_buf));  switch (local_buf[0]) {  case 't' :    curr_time = n = atoi(local_buf+2); i= n % 60; n /= 60;    sprintf(s, "%d:%02d", n,i);    XtVaSetValues(tune_l0, XtNlabel, s, NULL);    if (total_time >0) {      thumbj = (float)curr_time / (float)total_time;      if (sizeof(thumbj) > sizeof(XtArgVal)) {        XtVaSetValues(tune_bar,XtNtopOfThumb,&thumbj,NULL);      } else {        XtArgVal *l_thumbj = (XtArgVal *) &thumbj;        XtVaSetValues(tune_bar,XtNtopOfThumb,*l_thumbj,NULL);      }    }    break;  case 'T' :    n= atoi(local_buf+2);    if(n > 0) {      total_time = n;      snprintf(s,sizeof(s), "/%2d:%02d", n/60, n%60);      XtVaSetValues(tune_l,XtNlabel,s,NULL);    }    break;  case 'E' :    {      char *name;      name=strrchr(local_buf+2,' ');      n= atoi(local_buf+2);      if(popup_shell_exist & FLIST_WINDOW)        XawListHighlight(file_list, n-1);      if(name==NULL)        break;      name++;      XtVaSetValues(title_mb,XtNlabel,name,NULL);      snprintf(window_title, sizeof(window_title), "%s : %s", APP_CLASS, local_buf+2);      XtVaSetValues(toplevel,XtNtitle,window_title,NULL);      *window_title = '\0';    }    break;  case 'e' :    if (arrangetitle) {      char *p= local_buf+2;      if (!strcmp(p, "(null)")) p = UNTITLED_STR;      snprintf(window_title, sizeof(window_title), "%s : %s", APP_CLASS, p);      XtVaSetValues(toplevel,XtNtitle,window_title,NULL);    }

⌨️ 快捷键说明

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