📄 motif_i.c
字号:
if (pc==NULL) pc=filename; else pc++; ac=0; XtSetArg(al[ac], XmNlabelString, XmStringCreate(pc, char_set)); ac++; XtSetValues(file_namelbl, al, ac); /* Change the icon */ ac=0; XtSetArg(al[ac], XmNiconName,pc); ac++; XtSetValues(toplevel,al,ac); /* Put a separator in the text Window */ ac=0; nbcol=10; XtSetArg(al[ac], XmNcolumns,&nbcol); ac++; XtGetValues(text,al,ac); for (i=0;i<nbcol;i++) separator[i]='*'; separator[i]='\0'; XmTextInsert(text,wpr_position, separator); wpr_position+= strlen(separator); XmTextInsert(text,wpr_position++,"\n"); XtVaSetValues(text,XmNcursorPosition, wpr_position,NULL); XmTextShowPosition(text,wpr_position); } break; case FILE_LIST_MESSAGE : { char filename[255]; int i, number_of_files; XmString s; /* reset the playing list : play from the start */ file_number_to_play=0; m_pipe_int_read(&number_of_files); for (i=0;i<number_of_files;i++) { m_pipe_string_read(filename); s=XmStringCreate(filename,char_set); XmListAddItemUnselected(file_list,s,0); XmStringFree(s); } } break; case ERROR_MESSAGE : case NEXT_FILE_MESSAGE : case PREV_FILE_MESSAGE : case TUNE_END_MESSAGE :{ Arg al[10]; int ac; int nbfile; XmStringTable files; /* When a file ends, launch next if auto_next toggle */ if ((message==TUNE_END_MESSAGE) && !XmToggleButtonGetState(auto_next_option)) return; /* Total number of file to play in the list */ ac=0; XtSetArg(al[ac], XmNitemCount, &nbfile); ac++; XtGetValues(file_list, al, ac); XmListDeselectAllItems(file_list); if (message==NEXT_FILE_MESSAGE||message==TUNE_END_MESSAGE) file_number_to_play++; else if (message==PREV_FILE_MESSAGE) file_number_to_play--; else { ac=0; XtSetArg(al[ac], XmNitems, &files); ac++; XtGetValues(file_list, al, ac); XmListDeleteItem(file_list, files[file_number_to_play-1]); XmListSelectPos(file_list,file_number_to_play,TRUE); return; } /* Do nothing if requested file is before first one */ if (file_number_to_play<=0) { file_number_to_play=0; XmScaleSetValue(locator_scale,0); return; } /* Stop after playing the last file */ if (file_number_to_play>nbfile) { file_number_to_play=nbfile+1; XmScaleSetValue(locator_scale,0); return; } XmListSelectPos(file_list,file_number_to_play,TRUE); } break; case CURTIME_MESSAGE : { int tseconds; int sec,seconds, minutes; int nbvoice; char local_string[20]; Arg al[10]; int ac; m_pipe_int_read(&tseconds); m_pipe_int_read(&nbvoice); sec=seconds=tseconds; /* To avoid blinking */ if (sec!=last_sec) { minutes=seconds/60; seconds-=minutes*60; sprintf(local_string,"%02d:%02d", minutes, seconds); ac=0; XtSetArg(al[ac], XmNlabelString, XmStringCreate(local_string, char_set)); ac++; XtSetValues(counterlbl, al, ac); } last_sec=sec; /* Readjust the time scale if not dragging the scale */ if ( (locator_scale_button==ButtonRelease) && (tseconds<max_sec)) XmScaleSetValue(locator_scale, tseconds); } break; case NOTE_MESSAGE : { int channel; int note; m_pipe_int_read(&channel); m_pipe_int_read(¬e);#ifdef DEBUG printf("NOTE chn%i %i\n",channel,note);#endif /* DEBUG */ } break; case PROGRAM_MESSAGE :{ int channel; int pgm; m_pipe_int_read(&channel); m_pipe_int_read(&pgm);#ifdef DEBUG printf("NOTE chn%i %i\n",channel,pgm);#endif /* DEBUG */ } break; case VOLUME_MESSAGE : { int channel; int volume; m_pipe_int_read(&channel); m_pipe_int_read(&volume);#ifdef DEBUG printf("VOLUME= chn%i %i \n",channel, volume);#endif /* DEBUG */ } break; case EXPRESSION_MESSAGE : { int channel; int express; m_pipe_int_read(&channel); m_pipe_int_read(&express);#ifdef DEBUG printf("EXPRESSION= chn%i %i \n",channel, express);#endif /* DEBUG */ } break; case PANNING_MESSAGE : { int channel; int pan; m_pipe_int_read(&channel); m_pipe_int_read(&pan);#ifdef DEBUG printf("PANNING= chn%i %i \n",channel, pan);#endif /* DEBUG */ } break; case SUSTAIN_MESSAGE : { int channel; int sust; m_pipe_int_read(&channel); m_pipe_int_read(&sust);#ifdef DEBUG printf("SUSTAIN= chn%i %i \n",channel, sust);#endif /* DEBUG */ } break; case PITCH_MESSAGE : { int channel; int bend; m_pipe_int_read(&channel); m_pipe_int_read(&bend);#ifdef DEBUG printf("PITCH BEND= chn%i %i \n",channel, bend);#endif /* DEBUG */ } break; case RESET_MESSAGE : {#ifdef DEBUG printf("RESET_MESSAGE\n");#endif /* DEBUG */ } break; case CLOSE_MESSAGE : {#ifdef DEBUG printf("CLOSE_MESSAGE\n");#endif /* DEBUG */ exit(0); } break; case CMSG_MESSAGE : { int type; char message[1000]; m_pipe_int_read(&type); m_pipe_string_read(message); XmTextInsert(text,wpr_position, message); wpr_position+= strlen(message); XmTextInsert(text,wpr_position++, "\n"); XtVaSetValues(text,XmNcursorPosition, wpr_position,NULL); XmTextShowPosition(text,wpr_position); } break; case LYRIC_MESSAGE : { char message[1000]; m_pipe_string_read(message); XmTextInsert(text, wpr_position, message); wpr_position += strlen(message); XtVaSetValues(text,XmNcursorPosition, wpr_position,NULL); XmTextShowPosition(text,wpr_position); XmTextInsert(text,wpr_position, ""); /* Update cursor */ } break; default: fprintf(stderr,"UNKNOW MOTIF MESSAGE %i" NLS, message); }}/* *************************************** * * * Convenience function to create menus * * * *****************************************//* adds an accelerator to a menu option. */static void add_accelerator(Widget w,char *acc_text,char *key){ int ac; Arg al[10]; ac=0; XtSetArg(al[ac],XmNacceleratorText, XmStringCreate(acc_text,char_set)); ac++; XtSetArg(al[ac],XmNaccelerator,key); ac++; XtSetValues(w,al,ac);}/* Adds a toggle option to an existing menu. */static Widget make_menu_toggle(char *item_name, int client_data, Widget menu){ int ac; Arg al[10]; Widget item; ac = 0; XtSetArg(al[ac],XmNlabelString, XmStringCreateLtoR(item_name, char_set)); ac++; item=XmCreateToggleButton(menu,item_name,al,ac); XtManageChild(item); XtAddCallback(item, XmNvalueChangedCallback, (XtCallbackProc) menuCB,(XtPointer) client_data); XtSetSensitive(item, True); return(item);}/* Adds an option to an existing menu. */static Widget make_menu_option(char *option_name, KeySym mnemonic, int client_data, Widget menu){ int ac; Arg al[10]; Widget b; ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR(option_name, char_set)); ac++; XtSetArg (al[ac], XmNmnemonic, mnemonic); ac++; b=XtCreateManagedWidget(option_name,xmPushButtonWidgetClass, menu,al,ac); XtAddCallback (b, XmNactivateCallback, (XtCallbackProc) menuCB, (XtPointer) client_data); return(b);}/* Creates a new menu on the menu bar. */static Widget make_menu(char *menu_name,KeySym mnemonic, Widget menu_bar){ int ac; Arg al[10]; Widget menu, cascade; ac = 0; menu = XmCreatePulldownMenu (menu_bar, menu_name, al, ac); ac = 0; XtSetArg (al[ac], XmNsubMenuId, menu); ac++; XtSetArg (al[ac], XmNmnemonic, mnemonic); ac++; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR(menu_name, char_set)); ac++; cascade = XmCreateCascadeButton (menu_bar, menu_name, al, ac); XtManageChild (cascade); return(menu);}/* ******************************************* * * * Interface initialisation before launching * * * *********************************************/static void create_menus(Widget menu_bar){ Widget menu; menu=make_menu("File",'F',menu_bar); open_option = make_menu_option("Open", 'O', MENU_OPEN, menu); add_accelerator(open_option, "meta+o", "Meta<Key>o:"); quit_option = make_menu_option("Exit", 'E', MENU_QUIT, menu); add_accelerator(quit_option, "meta+q", "Meta<Key>q:"); menu=make_menu("Options",'O',menu_bar); auto_next_option= make_menu_toggle("Auto Next", MENU_TOGGLE, menu); XmToggleButtonSetState( auto_next_option , True , False );}static void create_dialog_boxes(void){ Arg al[10]; int ac; XmString add_all = XmStringCreateLocalized("ADD ALL"); /* create the file selection box used by MENU_OPEN */ ac=0; XtSetArg(al[ac],XmNmustMatch,True); ac++; XtSetArg(al[ac],XmNautoUnmanage,False); ac++; XtSetArg(al[ac],XmNdialogTitle, XmStringCreateLtoR("TIMIDITY: Open",char_set)); ac++; open_dialog=XmCreateFileSelectionDialog(toplevel,"open_dialog",al,ac); XtAddCallback(open_dialog, XmNokCallback, (XtCallbackProc) openCB, (XtPointer) DIALOG_OK); XtAddCallback(open_dialog, XmNcancelCallback, (XtCallbackProc) openCB, (XtPointer) DIALOG_CANCEL); XtUnmanageChild(XmFileSelectionBoxGetChild(open_dialog, XmDIALOG_HELP_BUTTON)); ac = 0; XtSetArg(al[ac], XmNleftOffset, 10); ac++; XtSetArg(al[ac], XmNrightOffset, 10); ac++; XtSetArg(al[ac], XmNtopOffset, 10); ac++; XtSetArg(al[ac], XmNbottomOffset, 10); ac++; XtSetArg(al[ac], XmNlabelString, add_all); ac++; add_all_button = XmCreatePushButton(open_dialog, "add_all",al, ac); XtManageChild(add_all_button); XtAddCallback(add_all_button, XmNactivateCallback, (XtCallbackProc) openCB, (XtPointer) DIALOG_ALL);}void Launch_Motif_Process(int pipe_number){ Arg al[20]; int ac; int argc=0; XtSetLanguageProc(NULL,NULL,NULL); /* By KINOSHITA, K. <kino@krhm.jvc-victor.co.jp> */ /* create the toplevel shell */ toplevel = XtAppInitialize(&context,"timidity",NULL,0,&argc,NULL, NULL,NULL,0); /*******************/ /* Main form */ /*******************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -