-2008-4-1 Keishi Suenaga <skeishi@yahoo.co.jp>
+2008-4-2 Keishi Suenaga <skeishi@yahoo.co.jp>
patchs by Yair K.
* timidity/common.c
common.makefile.in
configure.in
doc/C/README.xaw
interface/arrow.xbm
- interface/bitmaps/arrow.xbm
- interface/bitmaps/check.xbm
- interface/bitmaps/fast.xbm
- interface/bitmaps/keydown.xbm
- interface/bitmaps/keyup.xbm
- interface/bitmaps/off.xbm
- interface/bitmaps/on.xbm
- interface/bitmaps/slow.xbm
+ interface/bitmaps/arrow.xbm add
+ interface/bitmaps/check.xbm add
+ interface/bitmaps/fast.xbm add
+ interface/bitmaps/keydown.xbm add
+ interface/bitmaps/keyup.xbm add
+ interface/bitmaps/off.xbm add
+ interface/bitmaps/on.xbm add
+ interface/bitmaps/slow.xbm add
interface/check.xbm
interface/Makefile.am
interface/off.xbm
interface/xaw_c.c
interface/xaw.h
interface/xaw_i.c
- interface/xdnd.c
- interface/xdnd.h
- interface/x_trace.c
- interface/x_trace.h
+ interface/xdnd.c add
+ interface/xdnd.h add
+ interface/x_trace.c add
+ interface/x_trace.h add
Makefile.am
Makefile.in
script/unix2dos.sh
file timidity/speex_a.c
file timidity/vorbis_a.c
timidity/wave_a.c
- TiMidity.ad
- TiMidity.ad.in
- TiMidity-uj.ad
- TiMidity-uj.ad.in some improvements of XAW interface.
+ TiMidity.ad add
+ TiMidity.ad.in remove
+ TiMidity-uj.ad add
+ TiMidity-uj.ad.in remove some improvements of XAW interface.
2008-4-1 Keishi Suenaga <skeishi@yahoo.co.jp>
a patch by Milan Zamazal
--- /dev/null
+! TiMidity.ad -- app-defaults file for TiMidity++ XAW interface
+! Created by Yoshishige Arai <ryo2@on.rim.or.jp>
+! Modified by Chisato Yamauchi <cyamauch@hst.phyas.aichi-edu.ac.jp>
+
+TiMidity*international: True
+TiMidity*inputMethod: none
+TiMidity*gradientBar: True
+TiMidity*highlightThickness: 1
+TiMidity*LabelFile: file...
+TiMidity*moreString: More...
+TiMidity*noPlaying: [ No Playing File ]
+TiMidity*file_simplemenu.load.label: ¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É (Meta-N)
+TiMidity*file_simplemenu.save.label: Save (Ctrl-V)
+TiMidity*file_simplemenu.load_playlist.label: Load Playlist (Meta-L)
+TiMidity*file_simplemenu.save_playlist.label: Save Playlist (Meta-P)
+TiMidity*file_simplemenu.saveconfig.label: ÀßÄêÊݸ (Meta-S)
+TiMidity*file_simplemenu.hidetext.label: ¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨/Èóɽ¼¨ (Ctrl-M)
+TiMidity*file_simplemenu.hidetrace.label: ¥È¥ì¡¼¥¹²èÌ̤Îɽ¼¨/Èóɽ¼¨ (Ctrl-T)
+TiMidity*file_simplemenu.shuffle.label: ¥·¥ã¥Ã¥Õ¥ë (Ctrl-S)
+TiMidity*file_simplemenu.repeat.label: ¥ê¥Ô¡¼¥È (Ctrl-R)
+TiMidity*file_simplemenu.autostart.label: ¼«Æ°±éÁÕ
+TiMidity*file_simplemenu.autoquit.label: ¼«Æ°½ªÎ»
+TiMidity*file_simplemenu.filelist.label: ±éÁÕ¥Õ¥¡¥¤¥ë¥ê¥¹¥È (Ctrl-F)
+TiMidity*file_simplemenu.modes.label: ³ÈÄ¥ÀßÄê¥â¡¼¥É (Ctrl-O)
+TiMidity*file_simplemenu.about.label: TiMidity++ ¤Ë¤Ä¤¤¤Æ
+TiMidity*file_simplemenu.quit.label: ½ªÎ» (Meta-Q, Q)
+TiMidity*file_simplemenu.translations: #override\n\
+ <Key>n: MenuPopdown() do-menu(100)\n\
+ ~Meta<Key>l: MenuPopdown() do-menu(100)\n\
+ <Key>v: MenuPopdown() do-menu(101)\n\
+ Meta<Key>l: MenuPopdown() do-menu(102)\n\
+ <Key>d: MenuPopdown() do-menu(102)\n\
+ <Key>p: MenuPopdown() do-menu(103)\n\
+ ~Ctrl<Key>s: MenuPopdown() do-menu(104)\n\
+ <Key>h: MenuPopdown() do-menu(107)\n\
+ Ctrl<Key>s: MenuPopdown() do-menu(107)\n\
+ <Key>r: MenuPopdown() do-menu(108)\n\
+ <Key>m: MenuPopdown() do-menu(105)\n\
+ <Key>t: MenuPopdown() do-menu(106)\n\
+ <Key>u: MenuPopdown() do-menu(109)\n\
+ <Key>e: MenuPopdown() do-menu(110)\n\
+ ~Meta<Key>f: MenuPopdown() do-filelist()\n\
+ <Key>o: MenuPopdown() do-options()\n\
+ <Key>a: MenuPopdown() do-about()\n\
+ <Key>q: MenuPopdown() do-quit()\n\
+ <Key>Escape: MenuPopdown()\n\
+ <Motion>: highlight()
+TiMidity*load_dialog.label: ¥Õ¥¡¥¤¥ë̾
+TiMidity*load_dialog.add.label: ¤¹¤Ù¤Æ¤òÄɲÃ
+TiMidity*load_dialog.load_button.label: ¥Õ¥£¥ë¥¿¡¼
+TiMidity*flist_cmdbox.fplaybutton.label: ±éÁÕ
+TiMidity*flist_cmdbox.fdeletebutton.label: ºï½ü
+TiMidity*flist_cmdbox.fdelallbutton.label: ¤¹¤Ù¤Æ¤òºï½ü
+TiMidity*OK.label: ³Îǧ
+TiMidity*Cancel.label: ¥¥ã¥ó¥»¥ë
+TiMidity*modul_box.modul_lbl.label: ¥â¥¸¥å¥ì¡¼¥·¥ç¥ó¥³¥ó¥È¥í¡¼¥ë
+TiMidity*porta_box.porta_lbl.label: ¥Ý¥ë¥¿¥á¥ó¥È¥³¥ó¥È¥í¡¼¥ë
+TiMidity*nrpnv_box.nrpnv_lbl.label: NRPN ¥Ó¥Ö¥é¡¼¥È
+TiMidity*reverb_box.reverb_lbl.label: ¥ê¥Ð¡¼¥Ö¥¨¥Õ¥§¥¯¥È¥³¥ó¥È¥í¡¼¥ë
+TiMidity*chorus_box.chorus_lbl.label: ¥³¡¼¥é¥¹¥¨¥Õ¥§¥¯¥È¥³¥ó¥È¥í¡¼¥ë
+TiMidity*chpressure_box.chpressure_lbl.label: ¥Á¥ã¥ó¥Í¥ë¥×¥ì¥Ã¥·¥ã¡¼
+TiMidity*overlapvoice_box.overlapv_lbl.label: Ʊ°ì²»¤Î½ÅÊ£¤òµö¤¹
+TiMidity*txtmeta_box.txtmeta_lbl.label: ¤¹¤Ù¤Æ¤Î¥Æ¥¥¹¥È¥á¥¿¥¤¥Ù¥ó¥È¤ò¥È¥ì¡¼¥¹
+TiMidity*sbox_ratelabel.label: Rate
+TiMidity*closebutton.label: ÊĤ¸¤ë
+TiMidity*base_form.translations: #override\n\
+ Ctrl ~Shift<Key>v: do-menu(101)\n\
+ ~Ctrl Meta<Key>s: do-menu(104)\n\
+ Ctrl<Key>m: do-menu(105)\n\
+ Ctrl<Key>t: do-menu(106)\n\
+ Ctrl<Key>s: do-menu(107)\n\
+ Ctrl<Key>r: do-menu(108)\n\
+ Meta<Key>l: do-menu(102)\n\
+ Meta<Key>p: do-menu(103)\n\
+ ~Ctrl Meta<Key>n: do-menu(100)\n\
+ <Key>Right: do-next()\n\
+ ~Ctrl ~Meta<Key>n: do-next()\n\
+ <Key>Left: do-prev()\n\
+ ~Meta<Key>p: do-prev()\n\
+ <Key>KP_Enter: do-play()\n\
+ <Key>Return: do-play()\n\
+ ~Ctrl<Key>r: do-play()\n\
+ ~Ctrl ~Meta<Key>f: do-forward()\n\
+ ~Ctrl<Key>b: do-back()\n\
+ ~Ctrl<Key>space: do-pause()\n\
+ ~Ctrl<Key>s: do-stop()\n\
+ <Key>Up: do-volupdown(10)\n\
+ ~Ctrl Shift<Key>v: do-volupdown(10)\n\
+ <Key>Down: do-volupdown(-10)\n\
+ ~Ctrl ~Shift<Key>v: do-volupdown(-10)\n\
+ <Key>KP_Add: do-key()\n\
+ ~Ctrl<Key>plus: do-key()\n\
+ <Key>KP_Subtract: do-key(1)\n\
+ ~Shift<Key>-: do-key(1)\n\
+ ~Ctrl<Key>greater: do-speed()\n\
+ ~Ctrl<Key>less: do-speed(1)\n\
+ ~Ctrl Shift<Key>o: do-voice(1)\n\
+ ~Ctrl ~Shift<Key>o: do-voice()\n\
+ ~Ctrl<Key>g: do-sndspec()\n\
+ ~Ctrl<Key>x: do-exchange()\n\
+ ~Ctrl<Key>t: do-toggletrace()\n\
+ ~Meta<Key>l: do-filelist()\n\
+ Ctrl<Key>f: do-filelist()\n\
+ Ctrl<Key>o: do-options()\n\
+ <Key>a: do-about()\n\
+ Ctrl<Key>d: do-toggle-tooltips(-1)\n\
+ <ConfigureNotify>: do-resize()\n\
+ <Key>j: changetrace(1)\n\
+ ~Ctrl Meta <Key>f: show-menu()\n\
+ <Key>z: show-menu()\n\
+ <BtnDown>: hide-menu()\n\
+ ~Ctrl<Key>q: do-quit()
+TiMidity*menu_width: 300
+TiMidity*menu_box.borderWidth: 0
+TiMidity*file_menubutton.menuName: file_simplemenu
+TiMidity*file_menubutton.width: 60
+TiMidity*file_menubutton.height: 26
+TiMidity*file_menubutton.horizDistance: 6
+TiMidity*file_menubutton.vertDistance: 4
+TiMidity*file_menubutton.shadowWidth: 1
+TiMidity*title_menubutton.menuName: title_simplemenu
+TiMidity*title_menubutton.width: 210
+TiMidity*title_menubutton.height: 26
+TiMidity*title_menubutton.resize: false
+TiMidity*title_menubutton.fromHoriz: file_menubutton
+TiMidity*title_menubutton.horizDistance: 6
+TiMidity*title_menubutton.vertDistance: 4
+TiMidity*title_menubutton.shadowWidth: 1
+TiMidity*time_label.label: time / mode
+TiMidity*time_label.width: 92
+TiMidity*time_label.height: 26
+TiMidity*time_label.resize: false
+TiMidity*time_label.fromHoriz: title_menubutton
+TiMidity*time_label.horizDistance: 1
+TiMidity*time_label.vertDistance: 4
+TiMidity*time_label.shadowWidth: 1
+TiMidity*time_label.translations: #override\n\
+ <Btn2Down>: do-menu(105)\n\
+ <Btn3Down>: do-exchange()
+TiMidity*button_box.height: 40
+TiMidity*button_box.horizDistance: 4
+TiMidity*button_box.borderWidth: 0
+TiMidity*button_box*Command.width: 32
+TiMidity*button_box*Command.height: 32
+TiMidity*button_box*Toggle.width: 32
+TiMidity*button_box*Toggle.height: 32
+TiMidity*button_box*Command.horizDistance: 1
+TiMidity*button_box*Command.vertDistance: 1
+TiMidity*button_box*Toggle.horizDistance: 1
+TiMidity*button_box*Toggle.vertDistance: 1
+TiMidity*random_button.horizDistance: 4
+TiMidity*play_button.vertDistance: 9
+TiMidity*play_button.tip: ±éÁÕ
+TiMidity*pause_button.tip: µÙ»ß
+TiMidity*stop_button.tip: Ää»ß
+TiMidity*prev_button.tip: Á°¤Ç¤¹
+TiMidity*back_button.tip: Ìá¤ë
+TiMidity*fwd_button.tip: žÁ÷¤·¤Þ¤¹
+TiMidity*next_button.tip: ¼¡¤Ë
+TiMidity*quit_button.tip: ½ªÎ»
+TiMidity*random_button.tip: ¥·¥ã¥Ã¥Õ¥ë
+TiMidity*repeat_button.tip: ¥ê¥Ô¡¼¥È
+TiMidity*fast_b.tip: Increase tempo
+TiMidity*slow_b.tip: Decrease Tempo
+TiMidity*pitchup_b.tip: Raise pitch
+TiMidity*pitchdown_b.tip: Lower pitch
+TiMidity*volume_label.borderWidth: 0
+TiMidity*volume_box*horizDistance: 0
+TiMidity*volume_box*vertDistance: 0
+TiMidity*volume_box.vertDistance: 2
+TiMidity*volume_box.borderWidth: 0
+TiMidity*volume_bar.translations: #override\n\
+ ~Ctrl Shift<Btn1Down>: do-volupdown(-50)\n\
+ ~Ctrl Shift<Btn3Down>: do-volupdown(50)\n\
+ ~Ctrl Shift<Btn2Down>: do-volupdown(1)\n\
+ Ctrl ~Shift<Btn2Down>: do-volupdown(-1)\n\
+ Ctrl ~Shift<Btn1Down>: do-volupdown(-5)\n\
+ Ctrl ~Shift<Btn3Down>: do-volupdown(5)\n\
+ <BtnDown>: StartScroll(Continuous) MoveThumb() NotifyThumb()\n\
+ <BtnUp>: NotifyScroll(FullLength) EndScroll()
+TiMidity*tune_label.label: / ----
+TiMidity*tune_box*horizDistance: 0
+TiMidity*tune_box*vertDistance: 0
+TiMidity*tune_box.vertDistance: 2
+TiMidity*tune_box.borderWidth: 0
+TiMidity*tune_bar.translations: #override\n\
+ <BtnDown>: StartScroll(Continuous) MoveThumb() NotifyThumb()\n\
+ <BtnMotion>: MoveThumb() NotifyThumb()\n\
+ <BtnUp>: do-tuneset() NotifyScroll(FullLength) EndScroll()
+TiMidity*lyric_text.height: 120
+TiMidity*lyric_text.fromVert: tune_box
+TiMidity*lyric_text.horizDistance: 6
+TiMidity*lyric_text.vertDistance: 4
+TiMidity*lyric_text.borderWidth: 1
+TiMidity*lyric_text.scrollVertical: Always
+TiMidity*lyric_text.translations: #override\n\
+ <Btn2Down>: do-deltext()\n\
+ <Btn4Down>: do-scroll-lyrics(-1)\n\
+ <Btn5Down>: do-scroll-lyrics(1)
+TiMidity*trace.vertDistance: 2
+TiMidity*trace.borderWidth: 1
+TiMidity*trace.translations: #override\n\
+ <Btn1Down>: do-toggletrace()\n\
+ <Btn3Down>: do-mutechan()\n\
+ <Btn4Down>: changetrace(-1)\n\
+ <Btn5Down>: changetrace(1)\n\
+ <EnterNotify>: do-revcaption()\n\
+ <LeaveNotify>: do-revcaption()\n\
+ <Expose>: draw-trace()
+TiMidity*trace_vport.borderWidth: 1
+TiMidity*popup_optform*Box*borderWidth: 0
+TiMidity*List.baseTranslations: #override\n\
+ <Btn4Down>: do-scroll(-1)\n\
+ <Btn5Down>: do-scroll(1)
+TiMidity*Scrollbar.baseTranslations: #override\n\
+ <Btn4Down>: StartScroll(Backward)\n\
+ <Btn5Down>: StartScroll(Forward)
+TiMidity*Text.baseTranslations: #override\n\
+ ~Shift<Key>Delete: delete-next-character()\n\
+ Ctrl<Key>V: insert-selection(CLIPBOARD)
+TiMidity*TransientShell.Box.baseTranslations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-closeparent()\n\
+ <Key>Return: do-closeparent()
+TiMidity*popup_load.title: TiMidity <Load File>
+TiMidity*load_dialog.borderWidth: 0
+TiMidity*load_dialog.value.translations: #override\n\
+ <Key>Escape: do-popdown()\n\
+ Ctrl ~Shift<Key>g: do-popdown()\n\
+ Ctrl Meta<Key>KP_Enter: do-addall()\n\
+ ~Ctrl Meta<Key>Return: do-addall()\n\
+ ~Ctrl ~Meta<Key>Return: do-chgdir()\n\
+ ~Ctrl ~Meta<Key>KP_Enter: do-chgdir()\n\
+ <Key>BackSpace: do-backspace() delete-previous-character()\n\
+ Ctrl<Key>H: do-backspace() delete-previous-character()\n\
+ ~Ctrl ~Meta<Key>Tab: do-complete() end-of-line()
+TiMidity*load_dialog.load_button.accelerators: #override\n\
+ Ctrl<KeyPress>`: toggle() notify()
+TiMidity*dialog_sfile*load_dialog.add.Sensitive: False
+TiMidity*dialog_list*load_dialog.add.Sensitive: False
+TiMidity*dialog_lfile.title: TiMidity <Load File>
+TiMidity*dialog_sfile.title: TiMidity <Save File>
+TiMidity*popup_slabel.label: Select output format
+TiMidity*popup_olabel.label: Output device
+TiMidity*popup_file.title: TiMidity <File List>
+TiMidity*popup_file*filelist.translations: #override\n\
+ <Btn1Up>(2+): do-fselect()\n\
+ <Btn3Up>: do-stop()
+TiMidity*flist_cmdbox.width: 272
+TiMidity*flist_cmdbox.height: 24
+TiMidity*flist_cmdbox.borderWidth: 0
+TiMidity*file_vport.width: 272
+TiMidity*file_vport.height: 336
+TiMidity*file_vport.borderWidth: 1
+TiMidity*popup_fform.translations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>Home: do-flistmove(-1, 0, 0)\n\
+ <Key>Prior: do-flistmove(-1, 0)\n\
+ <Key>Right: do-flistmove(-5)\n\
+ <Key>Up: do-flistmove(-1)\n\
+ <Key>p: do-flistmove(-1)\n\
+ <Key>n: do-flistmove(1)\n\
+ <Key>Down: do-flistmove(1)\n\
+ <Key>Left: do-flistmove(5)\n\
+ <Key>Next: do-flistmove(1, 0)\n\
+ <Key>End: do-flistmove(1, 0, 0)\n\
+ <Key>KP_Enter: do-fselect()\n\
+ <Key>Return: do-fselect()\n\
+ Ctrl<Key>m: do-fselect()\n\
+ ~Ctrl<Key>r: do-fselect()\n\
+ <Key>d: do-fdelete()\n\
+ :<Key>A: do-fdelall()\n\
+ ~Ctrl ~Meta<Key>f: do-forward()\n\
+ ~Ctrl<Key>b: do-back()\n\
+ <Key>space: do-pause()\n\
+ <Key>s: do-stop()\n\
+ Shift<Key>v: do-volupdown(10)\n\
+ ~Shift<Key>v: do-volupdown(-10)\n\
+ ~Ctrl<Key>q: do-quit()
+TiMidity*popup_option.title: TiMidity <Extend Modes>
+TiMidity*popup_optform.translations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ ~Ctrl<Key>q: do-quit()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-optionsclose()\n\
+ <Key>Return: do-optionsclose()
+TiMidity*popup_about.title: Information
+TiMidity*popup_confirm_title: Dialog
+TiMidity*popup_warning.title: Information
+TiMidity*popup_sformat.title: Dialog
+TiMidity*popup_cform.translations: #override\n\
+ ~Ctrl<Key>c: do-cancel()\n\
+ <Key>Escape: do-cancel()\n\
+ <Key>KP_Enter: do-ok()\n\
+ <Key>Return: do-ok()
+TiMidity*sbox_ratetext.translations: #override\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-record()\n\
+ <Key>Return: do-record()\n\
+ <Key>BackSpace: delete-previous-character()\n\
+ Shift<Key>: no-op()\n\
+ ~Ctrl<Key>0: insert-char()\n\
+ ~Ctrl<Key>KP_0: insert-char()\n\
+ ~Ctrl<Key>1: insert-char()\n\
+ ~Ctrl<Key>KP_1: insert-char()\n\
+ ~Ctrl<Key>2: insert-char()\n\
+ ~Ctrl<Key>KP_2: insert-char()\n\
+ ~Ctrl<Key>3: insert-char()\n\
+ ~Ctrl<Key>KP_3: insert-char()\n\
+ ~Ctrl<Key>4: insert-char()\n\
+ ~Ctrl<Key>KP_4: insert-char()\n\
+ ~Ctrl<Key>5: insert-char()\n\
+ ~Ctrl<Key>KP_5: insert-char()\n\
+ ~Ctrl<Key>6: insert-char()\n\
+ ~Ctrl<Key>KP_6: insert-char()\n\
+ ~Ctrl<Key>7: insert-char()\n\
+ ~Ctrl<Key>KP_7: insert-char()\n\
+ ~Ctrl<Key>8: insert-char()\n\
+ ~Ctrl<Key>KP_8: insert-char()\n\
+ ~Ctrl<Key>9: insert-char()\n\
+ ~Ctrl<Key>KP_9: insert-char()\n\
+ <Key>Home: beginning-of-file()\n\
+ :<Key>KP_Home: beginning-of-file()\n\
+ <Key>End: end-of-file()\n\
+ :<Key>KP_End: end-of-file()\n\
+ <Key>Right: forward-character()\n\
+ :<Key>KP_Right: forward-character()\n\
+ <Key>Left: backward-character()\n\
+ :<Key>KP_Left: backward-character()\n\
+ Hyper<Key>: no-op()\n\
+ Super<Key>: no-op()\n\
+ None<Key>: no-op()\n\
+ Alt<Key>: no-op()\n\
+ Meta<Key>: no-op()\n\
+ Lock<Key>: no-op()
+TiMidity*fbox_toggle0.accelerators: #override\n\
+ <Key>Up: do-up()\n\
+ <Key>Down: do-down()\n\
+ <Btn4Down>: do-up()\n\
+ <Btn5Down>: do-down()
+TiMidity*confirmexit.label: Do you wish to exit?
+TiMidity*warnoverwrite.label: Do you wish to overfile this file?
+TiMidity*saveplaylisterror.label: Could not save playlist!
+TiMidity*waitforwav.label: Please wait. This may take several minutes.
+TiMidity*warnrecording.label: Cannot record - a file is already being recorded.
+TiMidity*foreground: #c0c0c0
+TiMidity*background: #171717
+TiMidity*BoxColor: #666666
+TiMidity*Scrollbar*background: gray82
+TiMidity*ButtonForeground: #c0c0c0
+TiMidity*ButtonBackground: #444444
+TiMidity*ToggleForeground: #c0c0f0
+TiMidity*MenuButtonBackground: #839573
+TiMidity*menu_box*Foreground: #000000
+TiMidity*menu_box*SimpleMenu*Foreground: #c0c0c0
+TiMidity*Command.background: gray78
+TiMidity*Label.foreground: black
+TiMidity*Label.background: #CCFF33
+TiMidity*Text*background: gray82
+TiMidity*Text*scrollbar*background: gray82
+TiMidity*TextBackground: #666666
+TiMidity*Text2Background: #4e5945
+TiMidity*Tip.fontSet: -misc-fixed-medium-r-normal-*-10-*-*-*-*-*-*-*,*
+TiMidity*Tip.background: white
+TiMidity*Tip.foreground: black
+TiMidity*Tip.borderColor: black
+TiMidity*lyric_text*Foreground: #c0c0c0
+TiMidity*lyric_text*Background: #444444
+TiMidity*lyric_text*Scrollbar*Background: #666666
+TiMidity*TraceBackground: #4e5945
+TiMidity*VelForeground: #c0a080
+TiMidity*VelDrumForeground: #c08080
+TiMidity*VolForeground: #c0b0b0
+TiMidity*PanForeground: #a0a0c0
+TiMidity*ReverbColor: #c0c080
+TiMidity*CaptionColor: #a0a0a0
+TiMidity*ExpForeground: #80c0c0
+TiMidity*ChorusColor: #c0b080
+TiMidity*WhiteKeyColor: #d8d8d8
+TiMidity*trace_vport*background: #666666
+TiMidity*load_dialog*background: #666666
+TiMidity*load_dialog*Command.background: #666666
+TiMidity*load_dialog.label.background: #666666
+TiMidity*load_dialog*value.background: #666666
+TiMidity*load_dialog*value.MultiSrc.background: #666666
+TiMidity*load_dialog*value.MultiSink.background: #666666
+TiMidity*load_dialog.label*foreground: #c0c0c0
+TiMidity*load_dialog*cwd_label*foreground: #c0c0c0
+TiMidity*load_dialog*cwd_info*foreground: #c0c0c0
+TiMidity*popup_file*background: #666666
+TiMidity*popup_option*background: #666666
+TiMidity*popup_about*background: #666666
+TiMidity*popup_confirm*background: #666666
+TiMidity*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*Dialog*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*MenuButton*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*textfontset: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
+TiMidity*SmeBSB.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*Command*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*Dialog*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*Label*fontSet: -adobe-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*cwd_label.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*Text*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*file_menubutton.file_simplemenu*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*title_menubutton.title_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*time_label.fontSet: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*time_label*cwd_info.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*volume_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*tune_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*load_dialog.label.fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_abox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_cform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_sform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_optform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_wbox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+++ /dev/null
-! TiMidity.ad -- app-defaults file for TiMidity++ XAW interface
-! Created by Yoshishige Arai <ryo2@on.rim.or.jp>
-! Modified by Chisato Yamauchi <cyamauch@hst.phyas.aichi-edu.ac.jp>
-
-TiMidity*international: True
-TiMidity*inputMethod: none
-TiMidity*gradientBar: True
-TiMidity*highlightThickness: 1
-TiMidity*BitmapDir: @pkglibdir@/bitmaps/
-TiMidity*file_simplemenu*international: True
-TiMidity*file_simplemenu.load.label: ¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥É (Meta-N)
-TiMidity*file_simplemenu.saveconfig.label: ÀßÄêÊݸ (Meta-S)
-TiMidity*file_simplemenu.hidetext.label: ¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨/Èóɽ¼¨ (Ctrl-M)
-TiMidity*file_simplemenu.hidetrace.label: ¥È¥ì¡¼¥¹²èÌ̤Îɽ¼¨/Èóɽ¼¨ (Ctrl-T)
-TiMidity*file_simplemenu.shuffle.label: ¥·¥ã¥Ã¥Õ¥ë (Ctrl-S)
-TiMidity*file_simplemenu.repeat.label: ¥ê¥Ô¡¼¥È (Ctrl-R)
-TiMidity*file_simplemenu.autostart.label: ¼«Æ°±éÁÕ
-TiMidity*file_simplemenu.autoquit.label: ¼«Æ°½ªÎ»
-TiMidity*file_simplemenu.filelist.label: ±éÁÕ¥Õ¥¡¥¤¥ë¥ê¥¹¥È (Ctrl-F)
-TiMidity*file_simplemenu.modes.label: ³ÈÄ¥ÀßÄê¥â¡¼¥É (Ctrl-O)
-TiMidity*file_simplemenu.about.label: TiMidity++ ¤Ë¤Ä¤¤¤Æ
-TiMidity*file_simplemenu.quit.label: ½ªÎ» (Meta-Q, Q)
-TiMidity*load_dialog.label: ¥Õ¥¡¥¤¥ë̾
-TiMidity*load_dialog.OK.label: ³Îǧ
-TiMidity*load_dialog.add.label: ¤¹¤Ù¤Æ¤òÄɲÃ
-TiMidity*load_dialog.cancel.label: ¥¥ã¥ó¥»¥ë
-TiMidity*flist_cmdbox.fplaybutton.label: ±éÁÕ
-TiMidity*flist_cmdbox.fdeletebutton.label: ºï½ü
-TiMidity*flist_cmdbox.fdelallbutton.label: ¤¹¤Ù¤Æ¤òºï½ü
-TiMidity*popup_abox.OK.label: ³Îǧ
-TiMidity*modul_box.modul_lbl.label: ¥â¥¸¥å¥ì¡¼¥·¥ç¥ó¥³¥ó¥È¥í¡¼¥ë
-TiMidity*porta_box.porta_lbl.label: ¥Ý¥ë¥¿¥á¥ó¥È¥³¥ó¥È¥í¡¼¥ë
-TiMidity*nrpnv_box.nrpnv_lbl.label: NRPN ¥Ó¥Ö¥é¡¼¥È
-TiMidity*reverb_box.reverb_lbl.label: ¥ê¥Ð¡¼¥Ö¥¨¥Õ¥§¥¯¥È¥³¥ó¥È¥í¡¼¥ë
-TiMidity*chorus_box.chorus_lbl.label: ¥³¡¼¥é¥¹¥¨¥Õ¥§¥¯¥È¥³¥ó¥È¥í¡¼¥ë
-TiMidity*chpressure_box.chpressure_lbl.label: ¥Á¥ã¥ó¥Í¥ë¥×¥ì¥Ã¥·¥ã¡¼
-TiMidity*overlapvoice_box.overlapv_lbl.label: Ʊ°ì²»¤Î½ÅÊ£¤òµö¤¹
-TiMidity*txtmeta_box.txtmeta_lbl.label: ¤¹¤Ù¤Æ¤Î¥Æ¥¥¹¥È¥á¥¿¥¤¥Ù¥ó¥È¤ò¥È¥ì¡¼¥¹
-TiMidity*closebutton.label: ÊĤ¸¤ë
-TiMidity*base_form.translations: #override\n\
- ~Ctrl Meta<Key>s: do-menu(101)\n\
- Ctrl<Key>m: do-menu(102)\n\
- Ctrl<Key>t: do-menu(103)\n\
- Ctrl<Key>s: do-menu(104)\n\
- Ctrl<Key>r: do-menu(105)\n\
- ~Ctrl Meta<Key>n: do-load()\n\
- <Key>Right: do-next()\n\
- ~Meta<Key>n: do-next()\n\
- <Key>Left: do-prev()\n\
- <Key>p: do-prev()\n\
- <Key>KP_Enter: do-play()\n\
- <Key>Return: do-play()\n\
- ~Ctrl<Key>r: do-play()\n\
- ~Ctrl<Key>f: do-forward()\n\
- ~Ctrl<Key>b: do-back()\n\
- ~Ctrl<Key>space: do-pause()\n\
- ~Ctrl<Key>s: do-stop()\n\
- <Key>Up: do-volupdown(10)\n\
- ~Ctrl Shift<Key>v: do-volupdown(10)\n\
- <Key>Down: do-volupdown(-10)\n\
- ~Ctrl ~Shift<Key>v: do-volupdown(-10)\n\
- <Key>KP_Add: do-key()\n\
- ~Ctrl<Key>plus: do-key()\n\
- <Key>KP_Subtract: do-key(1)\n\
- ~Shift<Key>-: do-key(1)\n\
- ~Ctrl<Key>greater: do-speed()\n\
- ~Ctrl<Key>less: do-speed(1)\n\
- ~Ctrl Shift<Key>o: do-voice(1)\n\
- ~Ctrl ~Shift<Key>o: do-voice()\n\
- ~Ctrl<Key>g: do-sndspec()\n\
- ~Ctrl<Key>x: do-exchange()\n\
- ~Ctrl<Key>t: do-toggletrace()\n\
- <Key>l: do-filelist()\n\
- Ctrl<Key>f: do-filelist()\n\
- Ctrl<Key>o: do-options()\n\
- <Key>a: do-about()\n\
- <ConfigureNotify>: do-resize()\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*menu_width: 300
-TiMidity*menu_box.borderWidth: 0
-TiMidity*MenuButton.translations: \
- <EnterWindow>: highlight()\n\
- <LeaveWindow>: reset()\n\
- Any<BtnDown>: reset() fix-menu() PopupMenu()
-TiMidity*Command*international: True
-TiMidity*file_menubutton.menuName: file_simplemenu
-TiMidity*file_menubutton.width: 60
-TiMidity*file_menubutton.height: 26
-TiMidity*file_menubutton.horizDistance: 6
-TiMidity*file_menubutton.vertDistance: 4
-TiMidity*file_menubutton.shadowWidth: 1
-TiMidity*title_menubutton.menuName: title_simplemenu
-TiMidity*title_menubutton.width: 210
-TiMidity*title_menubutton.height: 26
-TiMidity*title_menubutton.resize: false
-TiMidity*title_menubutton.fromHoriz: file_menubutton
-TiMidity*title_menubutton.horizDistance: 6
-TiMidity*title_menubutton.vertDistance: 4
-TiMidity*title_menubutton.shadowWidth: 1
-TiMidity*time_label.label: time / mode
-TiMidity*time_label.width: 92
-TiMidity*time_label.height: 26
-TiMidity*time_label.resize: false
-TiMidity*time_label.fromHoriz: title_menubutton
-TiMidity*time_label.horizDistance: 1
-TiMidity*time_label.vertDistance: 4
-TiMidity*time_label.shadowWidth: 1
-TiMidity*time_label.translations: #override\n\
- <Btn2Down>: do-menu(103)\n\
- <Btn3Down>: do-exchange()
-TiMidity*button_box.height: 40
-TiMidity*button_box.horizDistance: 4
-TiMidity*button_box.borderWidth: 0
-TiMidity*play_button.width: 32
-TiMidity*play_button.height: 32
-TiMidity*play_button.horizDistance: 1
-TiMidity*play_button.vertDistance: 9
-TiMidity*pause_button.width: 32
-TiMidity*pause_button.height: 32
-TiMidity*pause_button.horizDistance: 1
-TiMidity*pause_button.vertDistance: 1
-TiMidity*stop_button.width: 32
-TiMidity*stop_button.height: 32
-TiMidity*stop_button.horizDistance: 1
-TiMidity*stop_button.vertDistance: 1
-TiMidity*prev_button.width: 32
-TiMidity*prev_button.height: 32
-TiMidity*prev_button.horizDistance: 1
-TiMidity*prev_button.vertDistance: 1
-TiMidity*back_button.width: 32
-TiMidity*back_button.height: 32
-TiMidity*back_button.horizDistance: 1
-TiMidity*back_button.vertDistance: 1
-TiMidity*fwd_button.width: 32
-TiMidity*fwd_button.height: 32
-TiMidity*fwd_button.horizDistance: 1
-TiMidity*fwd_button.vertDistance: 1
-TiMidity*next_button.width: 32
-TiMidity*next_button.height: 32
-TiMidity*next_button.horizDistance: 1
-TiMidity*next_button.vertDistance: 1
-TiMidity*quit_button.width: 32
-TiMidity*quit_button.height: 32
-TiMidity*quit_button.horizDistance: 1
-TiMidity*quit_button.vertDistance: 1
-TiMidity*random_button.width: 32
-TiMidity*random_button.height: 32
-TiMidity*random_button.horizDistance: 4
-TiMidity*random_button.vertDistance: 1
-TiMidity*repeat_button.width: 32
-TiMidity*repeat_button.height: 32
-TiMidity*repeat_button.horizDistance: 1
-TiMidity*repeat_button.vertDistance: 1
-TiMidity*volume_label.vertDistance: 0
-TiMidity*volume_label.borderWidth: 0
-TiMidity*volume_box.vertDistance: 2
-TiMidity*volume_box.borderWidth: 0
-TiMidity*volume_bar.length: 330
-TiMidity*volume_bar.translations: #override\n\
- ~Ctrl Shift<Btn1Down>: do-volupdown(-50)\n\
- ~Ctrl Shift<Btn3Down>: do-volupdown(50)\n\
- Ctrl ~Shift<Btn1Down>: do-volupdown(-5)\n\
- Ctrl ~Shift<Btn3Down>: do-volupdown(5)\n\
- <Btn1Down>: MoveThumb()\n\
- <BtnUp>: NotifyScroll(FullLength) EndScroll()
-TiMidity*tune_label.label: ----
-TiMidity*tune_label.horizDistance: 0
-TiMidity*tune_label.vertDistance: 0
-TiMidity*tune_label0.horizDistance: 0
-TiMidity*tune_box.vertDistance: 2
-TiMidity*tune_box.borderWidth: 0
-TiMidity*tune_bar.length: 330
-TiMidity*tune_bar.translations: #override\n\
- <Btn1Up>: do-tuneset()\n\
- <Btn3Up>: do-tuneslide()\n\
- <Btn1Down>: MoveThumb()\n\
- <BtnUp>: NotifyScroll(FullLength) EndScroll()
-TiMidity*lyric_text.international: True
-TiMidity*lyric_text.height: 120
-TiMidity*lyric_text.fromVert: tune_box
-TiMidity*lyric_text.horizDistance: 6
-TiMidity*lyric_text.vertDistance: 4
-TiMidity*lyric_text.borderWidth: 1
-TiMidity*lyric_text.scrollVertical: WhenNeeded
-TiMidity*lyric_text.translations: #override\n\
- <Btn2Down>: do-deltext()
-TiMidity*trace.vertDistance: 2
-TiMidity*trace.borderWidth: 1
-TiMidity*trace.translations: #override\n\
- <Btn1Down>: do-toggletrace()\n\
- <EnterNotify>: do-revcaption()\n\
- <LeaveNotify>: do-revcaption()\n\
- <Expose>: draw-trace()
-TiMidity*trace_vport.borderWidth: 1
-TiMidity*popup_load.title: TiMidity <Load File>
-TiMidity*popup_loadform.height: 400
-TiMidity*load_dialog.borderWidth: 0
-TiMidity*load_dialog.height: 132
-TiMidity*load_dialog.value.translations: #override\n\
- <Key>Escape: do-dialog-button(1)\n\
- Ctrl ~Shift<Key>g: do-dialog-button(1)\n\
- ~Ctrl<Key>KP_Enter: do-chgdir()\n\
- ~Ctrl<Key>Return: do-chgdir()\n\
- <Key>BackSpace: do-backspace() delete-previous-character()\n\
- ~Ctrl ~Meta<Key>Tab: do-complete() end-of-line()
-TiMidity*popup_file.title: TiMidity <File List>
-TiMidity*popup_fbox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- <Key>Down: do-flistmove(1)\n\
- <Key>n: do-flistmove(1)\n\
- <Key>Up: do-flistmove(-1)\n\
- <Key>p: do-flistmove(-1)\n\
- <Key>Next: do-flistmove(5)\n\
- <Key>Left: do-flistmove(5)\n\
- <Key>Prior: do-flistmove(-5)\n\
- <Key>Right: do-flistmove(-5)\n\
- <Key>KP_Enter: do-fselect()\n\
- <Key>Return: do-fselect()\n\
- Ctrl<Key>m: do-fselect()\n\
- ~Ctrl<Key>r: do-fselect()\n\
- <Key>d: do-fdelete()\n\
- ~Ctrl<Key>f: do-forward()\n\
- ~Ctrl<Key>b: do-back()\n\
- <Key>space: do-pause()\n\
- <Key>s: do-stop()\n\
- Shift<Key>v: do-volupdown(10)\n\
- ~Shift<Key>v: do-volupdown(-10)\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*popup_option.title: TiMidity <Extend Modes>
-TiMidity*popup_optbox*international: True
-TiMidity*popup_optbox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*popup_about.title: Information
-TiMidity*popup_abox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- <Key>KP_Enter: do-closeparent()\n\
- <Key>Return: do-closeparent()
-TiMidity*foreground: #c0c0c0
-TiMidity*background: #171717
-TiMidity*BoxColor: #666666
-TiMidity*Scrollbar*background: gray82
-TiMidity*ButtonForeground: #c0c0c0
-TiMidity*ButtonBackground: #444444
-TiMidity*ToggleForeground: #c0c0f0
-TiMidity*MenuButtonBackground: #839573
-TiMidity*menu_box*Foreground: #000000
-TiMidity*menu_box*SimpleMenu*Foreground: #c0c0c0
-TiMidity*Command.background: gray78
-TiMidity*Label.foreground: black
-TiMidity*Label.background: #CCFF33
-TiMidity*Text*background: gray82
-TiMidity*Text*scrollbar*background: gray82
-TiMidity*TextBackground: #666666
-TiMidity*Text2Background: #4e5945
-TiMidity*Dialog.Command.background: gray78
-TiMidity*Dialog.Text.background: gray82
-TiMidity*lyric_text*Foreground: #c0c0c0
-TiMidity*lyric_text*Background: #444444
-TiMidity*lyric_text*Scrollbar*Background: #666666
-TiMidity*TraceBackground: #4e5945
-TiMidity*VelForeground: #c0a080
-TiMidity*VelDrumForeground: #c08080
-TiMidity*VolForeground: #c0b0b0
-TiMidity*PanForeground: #a0a0c0
-TiMidity*ReverbColor: #c0c080
-TiMidity*CaptionColor: #a0a0a0
-TiMidity*ExpForeground: #80c0c0
-TiMidity*ChorusColor: #c0b080
-TiMidity*WhiteKeyColor: #d8d8d8
-TiMidity*trace_vport*background: #666666
-TiMidity*load_dialog.label.background: gray67
-TiMidity*popup_load*Viewport*background: #666666
-TiMidity*popup_load*load_dialog.Command*background: #666666
-TiMidity*popup_load*load_dialog*label*background: #666666
-TiMidity*popup_load*load_dialog*value.background: #666666
-TiMidity*popup_load*load_dialog*value.MultiSrc.background: #666666
-TiMidity*popup_load*load_dialog*value.MultiSink.background: #666666
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Label.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Toggle.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Toggle.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Command.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Command.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.background: #e7e7e7
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.borderColor: #6f6f6f
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSrc.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSrc.background: #e7e7e7
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSink.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSink.background: #e7e7e7
-TiMidity*popup_load*popup_loadform*load_dialog*label*foreground: #c0c0c0
-TiMidity*popup_load*popup_loadform*cwd_label*foreground: #c0c0c0
-TiMidity*popup_load*popup_loadform*cwd_info*foreground: #c0c0c0
-TiMidity*popup_file*background: #666666
-TiMidity*popup_option*background: #666666
-TiMidity*popup_about*background: #666666
-TiMidity*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*Form*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*MenuButton*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*TextFontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*SmeBSB.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*Command*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*Label*fontSet: -adobe-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*cwd_label.font: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*Text*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*file_menubutton.file_simplemenu*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*title_menubutton.title_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*time_label.font: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
-TiMidity*time_label*cwd_info.font: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*volume_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*tune_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*popup_loadform.load_dialog.label.fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-1,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*popup_abox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
--- /dev/null
+! TiMidity.ad -- app-defaults file for TiMidity++ XAW interface
+! Created by Yoshishige Arai <ryo2@on.rim.or.jp>
+! Modified by Chisato Yamauchi <cyamauch@hst.phyas.aichi-edu.ac.jp>
+
+TiMidity*international: True
+TiMidity*inputMethod: none
+TiMidity*gradientBar: True
+TiMidity*highlightThickness: 1
+TiMidity*LabelFile: file...
+TiMidity*moreString: More...
+TiMidity*noPlaying: [ No Playing File ]
+TiMidity*file_simplemenu.load.label: Load (Meta-N)
+TiMidity*file_simplemenu.load.underline: 0
+TiMidity*file_simplemenu.save.label: Save (Ctrl-V)
+TiMidity*file_simplemenu.save.underline: 2
+TiMidity*file_simplemenu.load_playlist.label: Load Playlist (Meta-L)
+TiMidity*file_simplemenu.load_playlist.underline: 3
+TiMidity*file_simplemenu.save_playlist.label: Save Playlist (Meta-P)
+TiMidity*file_simplemenu.save_playlist.underline: 5
+TiMidity*file_simplemenu.saveconfig.label: Save Config (Meta-S)
+TiMidity*file_simplemenu.saveconfig.underline: 0
+TiMidity*file_simplemenu.hidetext.label: (Un)Hide Messages (Ctrl-M)
+TiMidity*file_simplemenu.hidetext.underline: 9
+TiMidity*file_simplemenu.hidetrace.label: (Un)Hide Trace (Ctrl-T)
+TiMidity*file_simplemenu.hidetrace.underline: 9
+TiMidity*file_simplemenu.shuffle.label: Shuffle (Ctrl-S)
+TiMidity*file_simplemenu.shuffle.underline: 1
+TiMidity*file_simplemenu.repeat.label: Repeat (Ctrl-R)
+TiMidity*file_simplemenu.repeat.underline: 0
+TiMidity*file_simplemenu.autostart.label: Auto Start
+TiMidity*file_simplemenu.autostart.underline: 1
+TiMidity*file_simplemenu.autoquit.label: Auto Exit
+TiMidity*file_simplemenu.autoquit.underline: 5
+TiMidity*file_simplemenu.filelist.label: File List (Ctrl-F)
+TiMidity*file_simplemenu.filelist.underline: 0
+TiMidity*file_simplemenu.modes.label: Extend Modes (Ctrl-O)
+TiMidity*file_simplemenu.modes.underline: 8
+TiMidity*file_simplemenu.about.label: About
+TiMidity*file_simplemenu.about.underline: 0
+TiMidity*file_simplemenu.quit.label: Quit (Meta-Q, Q)
+TiMidity*file_simplemenu.quit.underline: 0
+TiMidity*file_simplemenu.translations: #override\n\
+ <Key>n: MenuPopdown() do-menu(100)\n\
+ ~Meta<Key>l: MenuPopdown() do-menu(100)\n\
+ <Key>v: MenuPopdown() do-menu(101)\n\
+ Meta<Key>l: MenuPopdown() do-menu(102)\n\
+ <Key>d: MenuPopdown() do-menu(102)\n\
+ <Key>p: MenuPopdown() do-menu(103)\n\
+ ~Ctrl<Key>s: MenuPopdown() do-menu(104)\n\
+ <Key>h: MenuPopdown() do-menu(107)\n\
+ Ctrl<Key>s: MenuPopdown() do-menu(107)\n\
+ <Key>r: MenuPopdown() do-menu(108)\n\
+ <Key>m: MenuPopdown() do-menu(105)\n\
+ <Key>t: MenuPopdown() do-menu(106)\n\
+ <Key>u: MenuPopdown() do-menu(109)\n\
+ <Key>e: MenuPopdown() do-menu(110)\n\
+ ~Meta<Key>f: MenuPopdown() do-filelist()\n\
+ <Key>o: MenuPopdown() do-options()\n\
+ <Key>a: MenuPopdown() do-about()\n\
+ <Key>q: MenuPopdown() do-quit()\n\
+ <Key>Escape: MenuPopdown()\n\
+ <Motion>: highlight()
+TiMidity*load_dialog.label: File Name
+TiMidity*load_dialog.add.label: Add ALL
+TiMidity*load_dialog.load_button.label: Filter
+TiMidity*flist_cmdbox.fplaybutton.label: Play
+TiMidity*flist_cmdbox.fdeletebutton.label: Delete
+TiMidity*flist_cmdbox.fdelallbutton.label: Delete ALL
+TiMidity*OK.label: OK
+TiMidity*Cancel.label: Cancel
+TiMidity*modul_box.modul_lbl.label: Modulation control
+TiMidity*porta_box.porta_lbl.label: Portamento control
+TiMidity*nrpnv_box.nrpnv_lbl.label: NRPN Vibration
+TiMidity*reverb_box.reverb_lbl.label: Reverb control
+TiMidity*chorus_box.chorus_lbl.label: Chorus control
+TiMidity*chpressure_box.chpressure_lbl.label: Channel Pressure control
+TiMidity*overlapvoice_box.overlapv_lbl.label: Allow Multiple Same Notes
+TiMidity*txtmeta_box.txtmeta_lbl.label: Tracing All Text Meta Events
+TiMidity*sbox_ratelabel.label: Rate
+TiMidity*closebutton.label: Close
+TiMidity*base_form.translations: #override\n\
+ Ctrl ~Shift<Key>v: do-menu(101)\n\
+ ~Ctrl Meta<Key>s: do-menu(104)\n\
+ Ctrl<Key>m: do-menu(105)\n\
+ Ctrl<Key>t: do-menu(106)\n\
+ Ctrl<Key>s: do-menu(107)\n\
+ Ctrl<Key>r: do-menu(108)\n\
+ Meta<Key>l: do-menu(102)\n\
+ Meta<Key>p: do-menu(103)\n\
+ ~Ctrl Meta<Key>n: do-menu(100)\n\
+ <Key>Right: do-next()\n\
+ ~Ctrl ~Meta<Key>n: do-next()\n\
+ <Key>Left: do-prev()\n\
+ ~Meta<Key>p: do-prev()\n\
+ <Key>KP_Enter: do-play()\n\
+ <Key>Return: do-play()\n\
+ ~Ctrl<Key>r: do-play()\n\
+ ~Ctrl ~Meta<Key>f: do-forward()\n\
+ ~Ctrl<Key>b: do-back()\n\
+ ~Ctrl<Key>space: do-pause()\n\
+ ~Ctrl<Key>s: do-stop()\n\
+ <Key>Up: do-volupdown(10)\n\
+ ~Ctrl Shift<Key>v: do-volupdown(10)\n\
+ <Key>Down: do-volupdown(-10)\n\
+ ~Ctrl ~Shift<Key>v: do-volupdown(-10)\n\
+ <Key>KP_Add: do-key()\n\
+ ~Ctrl<Key>plus: do-key()\n\
+ <Key>KP_Subtract: do-key(1)\n\
+ ~Shift<Key>-: do-key(1)\n\
+ ~Ctrl<Key>greater: do-speed()\n\
+ ~Ctrl<Key>less: do-speed(1)\n\
+ ~Ctrl Shift<Key>o: do-voice(1)\n\
+ ~Ctrl ~Shift<Key>o: do-voice()\n\
+ ~Ctrl<Key>g: do-sndspec()\n\
+ ~Ctrl<Key>x: do-exchange()\n\
+ ~Ctrl<Key>t: do-toggletrace()\n\
+ ~Meta<Key>l: do-filelist()\n\
+ Ctrl<Key>f: do-filelist()\n\
+ Ctrl<Key>o: do-options()\n\
+ <Key>a: do-about()\n\
+ Ctrl<Key>d: do-toggle-tooltips(-1)\n\
+ <ConfigureNotify>: do-resize()\n\
+ <Key>j: changetrace(1)\n\
+ ~Ctrl Meta <Key>f: show-menu()\n\
+ <Key>z: show-menu()\n\
+ <BtnDown>: hide-menu()\n\
+ ~Ctrl<Key>q: do-quit()
+TiMidity*menu_width: 300
+TiMidity*menu_box.borderWidth: 0
+TiMidity*file_menubutton.menuName: file_simplemenu
+TiMidity*file_menubutton.width: 60
+TiMidity*file_menubutton.height: 26
+TiMidity*file_menubutton.horizDistance: 6
+TiMidity*file_menubutton.vertDistance: 4
+TiMidity*file_menubutton.shadowWidth: 1
+TiMidity*title_menubutton.menuName: title_simplemenu
+TiMidity*title_menubutton.width: 210
+TiMidity*title_menubutton.height: 26
+TiMidity*title_menubutton.resize: false
+TiMidity*title_menubutton.fromHoriz: file_menubutton
+TiMidity*title_menubutton.horizDistance: 6
+TiMidity*title_menubutton.vertDistance: 4
+TiMidity*title_menubutton.shadowWidth: 1
+TiMidity*time_label.label: time / mode
+TiMidity*time_label.width: 92
+TiMidity*time_label.height: 26
+TiMidity*time_label.resize: false
+TiMidity*time_label.fromHoriz: title_menubutton
+TiMidity*time_label.horizDistance: 1
+TiMidity*time_label.vertDistance: 4
+TiMidity*time_label.shadowWidth: 1
+TiMidity*time_label.translations: #override\n\
+ <Btn2Down>: do-menu(105)\n\
+ <Btn3Down>: do-exchange()
+TiMidity*button_box.height: 40
+TiMidity*button_box.horizDistance: 4
+TiMidity*button_box.borderWidth: 0
+TiMidity*button_box*Command.width: 32
+TiMidity*button_box*Command.height: 32
+TiMidity*button_box*Toggle.width: 32
+TiMidity*button_box*Toggle.height: 32
+TiMidity*button_box*Command.horizDistance: 1
+TiMidity*button_box*Command.vertDistance: 1
+TiMidity*button_box*Toggle.horizDistance: 1
+TiMidity*button_box*Toggle.vertDistance: 1
+TiMidity*random_button.horizDistance: 4
+TiMidity*play_button.vertDistance: 9
+TiMidity*play_button.tip: Play
+TiMidity*pause_button.tip: Pause
+TiMidity*stop_button.tip: Stop
+TiMidity*prev_button.tip: Previous
+TiMidity*back_button.tip: Back
+TiMidity*fwd_button.tip: Forward
+TiMidity*next_button.tip: Next
+TiMidity*quit_button.tip: Quit
+TiMidity*random_button.tip: Shuffle
+TiMidity*repeat_button.tip: Repeat
+TiMidity*fast_b.tip: Increase tempo
+TiMidity*slow_b.tip: Decrease Tempo
+TiMidity*pitchup_b.tip: Raise pitch
+TiMidity*pitchdown_b.tip: Lower pitch
+TiMidity*volume_label.borderWidth: 0
+TiMidity*volume_box*horizDistance: 0
+TiMidity*volume_box*vertDistance: 0
+TiMidity*volume_box.vertDistance: 2
+TiMidity*volume_box.borderWidth: 0
+TiMidity*volume_bar.translations: #override\n\
+ ~Ctrl Shift<Btn1Down>: do-volupdown(-50)\n\
+ ~Ctrl Shift<Btn3Down>: do-volupdown(50)\n\
+ ~Ctrl Shift<Btn2Down>: do-volupdown(1)\n\
+ Ctrl ~Shift<Btn2Down>: do-volupdown(-1)\n\
+ Ctrl ~Shift<Btn1Down>: do-volupdown(-5)\n\
+ Ctrl ~Shift<Btn3Down>: do-volupdown(5)\n\
+ <BtnDown>: StartScroll(Continuous) MoveThumb() NotifyThumb()\n\
+ <BtnUp>: NotifyScroll(FullLength) EndScroll()
+TiMidity*tune_label.label: / ----
+TiMidity*tune_box*horizDistance: 0
+TiMidity*tune_box*vertDistance: 0
+TiMidity*tune_box.vertDistance: 2
+TiMidity*tune_box.borderWidth: 0
+TiMidity*tune_bar.translations: #override\n\
+ <BtnDown>: StartScroll(Continuous) MoveThumb() NotifyThumb()\n\
+ <BtnMotion>: MoveThumb() NotifyThumb()\n\
+ <BtnUp>: do-tuneset() NotifyScroll(FullLength) EndScroll()
+TiMidity*lyric_text.height: 120
+TiMidity*lyric_text.fromVert: tune_box
+TiMidity*lyric_text.horizDistance: 6
+TiMidity*lyric_text.vertDistance: 4
+TiMidity*lyric_text.borderWidth: 1
+TiMidity*lyric_text.scrollVertical: Always
+TiMidity*lyric_text.translations: #override\n\
+ <Btn2Down>: do-deltext()\n\
+ <Btn4Down>: do-scroll-lyrics(-1)\n\
+ <Btn5Down>: do-scroll-lyrics(1)
+TiMidity*trace.vertDistance: 2
+TiMidity*trace.borderWidth: 1
+TiMidity*trace.translations: #override\n\
+ <Btn1Down>: do-toggletrace()\n\
+ <Btn3Down>: do-mutechan()\n\
+ <Btn4Down>: changetrace(-1)\n\
+ <Btn5Down>: changetrace(1)\n\
+ <EnterNotify>: do-revcaption()\n\
+ <LeaveNotify>: do-revcaption()\n\
+ <Expose>: draw-trace()
+TiMidity*trace_vport.borderWidth: 1
+TiMidity*popup_optform*Box*borderWidth: 0
+TiMidity*List.baseTranslations: #override\n\
+ <Btn4Down>: do-scroll(-1)\n\
+ <Btn5Down>: do-scroll(1)
+TiMidity*Scrollbar.baseTranslations: #override\n\
+ <Btn4Down>: StartScroll(Backward)\n\
+ <Btn5Down>: StartScroll(Forward)
+TiMidity*Text.baseTranslations: #override\n\
+ ~Shift<Key>Delete: delete-next-character()\n\
+ Ctrl<Key>V: insert-selection(CLIPBOARD)
+TiMidity*TransientShell.Box.baseTranslations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-closeparent()\n\
+ <Key>Return: do-closeparent()
+TiMidity*popup_load.title: TiMidity <Load File>
+TiMidity*load_dialog.borderWidth: 0
+TiMidity*load_dialog.value.translations: #override\n\
+ <Key>Escape: do-popdown()\n\
+ Ctrl ~Shift<Key>g: do-popdown()\n\
+ Ctrl Meta<Key>KP_Enter: do-addall()\n\
+ ~Ctrl Meta<Key>Return: do-addall()\n\
+ ~Ctrl ~Meta<Key>Return: do-chgdir()\n\
+ ~Ctrl ~Meta<Key>KP_Enter: do-chgdir()\n\
+ <Key>BackSpace: do-backspace() delete-previous-character()\n\
+ Ctrl<Key>H: do-backspace() delete-previous-character()\n\
+ ~Ctrl ~Meta<Key>Tab: do-complete() end-of-line()
+TiMidity*load_dialog.load_button.accelerators: #override\n\
+ Ctrl<KeyPress>`: toggle() notify()
+TiMidity*dialog_sfile*load_dialog.add.Sensitive: False
+TiMidity*dialog_list*load_dialog.add.Sensitive: False
+TiMidity*dialog_lfile.title: TiMidity <Load File>
+TiMidity*dialog_sfile.title: TiMidity <Save File>
+TiMidity*popup_slabel.label: Select output format
+TiMidity*popup_olabel.label: Output device
+TiMidity*popup_file.title: TiMidity <File List>
+TiMidity*popup_file*filelist.translations: #override\n\
+ <Btn1Up>(2+): do-fselect()\n\
+ <Btn3Up>: do-stop()
+TiMidity*flist_cmdbox.width: 272
+TiMidity*flist_cmdbox.height: 24
+TiMidity*flist_cmdbox.borderWidth: 0
+TiMidity*file_vport.width: 272
+TiMidity*file_vport.height: 336
+TiMidity*file_vport.borderWidth: 1
+TiMidity*popup_fform.translations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>Home: do-flistmove(-1, 0, 0)\n\
+ <Key>Prior: do-flistmove(-1, 0)\n\
+ <Key>Right: do-flistmove(-5)\n\
+ <Key>Up: do-flistmove(-1)\n\
+ <Key>p: do-flistmove(-1)\n\
+ <Key>n: do-flistmove(1)\n\
+ <Key>Down: do-flistmove(1)\n\
+ <Key>Left: do-flistmove(5)\n\
+ <Key>Next: do-flistmove(1, 0)\n\
+ <Key>End: do-flistmove(1, 0, 0)\n\
+ <Key>KP_Enter: do-fselect()\n\
+ <Key>Return: do-fselect()\n\
+ Ctrl<Key>m: do-fselect()\n\
+ ~Ctrl<Key>r: do-fselect()\n\
+ <Key>d: do-fdelete()\n\
+ :<Key>A: do-fdelall()\n\
+ ~Ctrl ~Meta<Key>f: do-forward()\n\
+ ~Ctrl<Key>b: do-back()\n\
+ <Key>space: do-pause()\n\
+ <Key>s: do-stop()\n\
+ Shift<Key>v: do-volupdown(10)\n\
+ ~Shift<Key>v: do-volupdown(-10)\n\
+ ~Ctrl<Key>q: do-quit()
+TiMidity*popup_option.title: TiMidity <Extend Modes>
+TiMidity*popup_optform.translations: #override\n\
+ ~Ctrl<Key>c: do-closeparent()\n\
+ ~Ctrl<Key>q: do-quit()\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-optionsclose()\n\
+ <Key>Return: do-optionsclose()
+TiMidity*popup_about.title: Information
+TiMidity*popup_confirm: Dialog
+TiMidity*popup_warning.title: Information
+TiMidity*popup_sformat.title: Dialog
+TiMidity*popup_cform.translations: #override\n\
+ ~Ctrl<Key>c: do-cancel()\n\
+ <Key>Escape: do-cancel()\n\
+ <Key>KP_Enter: do-ok()\n\
+ <Key>Return: do-ok()
+TiMidity*sbox_ratetext.translations: #override\n\
+ <Key>Escape: do-closeparent()\n\
+ <Key>KP_Enter: do-record()\n\
+ <Key>Return: do-record()\n\
+ <Key>BackSpace: delete-previous-character()\n\
+ Shift<Key>: no-op()\n\
+ ~Ctrl<Key>0: insert-char()\n\
+ ~Ctrl<Key>KP_0: insert-char()\n\
+ ~Ctrl<Key>1: insert-char()\n\
+ ~Ctrl<Key>KP_1: insert-char()\n\
+ ~Ctrl<Key>2: insert-char()\n\
+ ~Ctrl<Key>KP_2: insert-char()\n\
+ ~Ctrl<Key>3: insert-char()\n\
+ ~Ctrl<Key>KP_3: insert-char()\n\
+ ~Ctrl<Key>4: insert-char()\n\
+ ~Ctrl<Key>KP_4: insert-char()\n\
+ ~Ctrl<Key>5: insert-char()\n\
+ ~Ctrl<Key>KP_5: insert-char()\n\
+ ~Ctrl<Key>6: insert-char()\n\
+ ~Ctrl<Key>KP_6: insert-char()\n\
+ ~Ctrl<Key>7: insert-char()\n\
+ ~Ctrl<Key>KP_7: insert-char()\n\
+ ~Ctrl<Key>8: insert-char()\n\
+ ~Ctrl<Key>KP_8: insert-char()\n\
+ ~Ctrl<Key>9: insert-char()\n\
+ ~Ctrl<Key>KP_9: insert-char()\n\
+ <Key>Home: beginning-of-file()\n\
+ :<Key>KP_Home: beginning-of-file()\n\
+ <Key>End: end-of-file()\n\
+ :<Key>KP_End: end-of-file()\n\
+ <Key>Right: forward-character()\n\
+ :<Key>KP_Right: forward-character()\n\
+ <Key>Left: backward-character()\n\
+ :<Key>KP_Left: backward-character()\n\
+ Hyper<Key>: no-op()\n\
+ Super<Key>: no-op()\n\
+ None<Key>: no-op()\n\
+ Alt<Key>: no-op()\n\
+ Meta<Key>: no-op()\n\
+ Lock<Key>: no-op()
+TiMidity*fbox_toggle0.accelerators: #override\n\
+ <Key>Up: do-up()\n\
+ <Key>Down: do-down()\n\
+ <Btn4Down>: do-up()\n\
+ <Btn5Down>: do-down()
+TiMidity*confirmexit.label: Do you wish to exit?
+TiMidity*warnoverwrite.label: Do you wish to overfile this file?
+TiMidity*saveplaylisterror.label: Could not save playlist!
+TiMidity*waitforwav.label: Please wait. This may take several minutes.
+TiMidity*warnrecording.label: Cannot record - a file is already being recorded.
+TiMidity*foreground: #c0c0c0
+TiMidity*background: #171717
+TiMidity*BoxColor: #666666
+TiMidity*Scrollbar*background: gray82
+TiMidity*ButtonForeground: #c0c0c0
+TiMidity*ButtonBackground: #444444
+TiMidity*ToggleForeground: #c0c0f0
+TiMidity*MenuButtonBackground: #839573
+TiMidity*menu_box*Foreground: #000000
+TiMidity*menu_box*SimpleMenu*Foreground: #c0c0c0
+TiMidity*Command.background: gray78
+TiMidity*Label.foreground: black
+TiMidity*Label.background: #CCFF33
+TiMidity*Text*background: gray82
+TiMidity*Text*scrollbar*background: gray82
+TiMidity*TextBackground: #666666
+TiMidity*Text2Background: #4e5945
+TiMidity*Tip.fontSet: -misc-fixed-medium-r-normal-*-10-*-*-*-*-*-*-*,*
+TiMidity*Tip.background: white
+TiMidity*Tip.foreground: black
+TiMidity*Tip.borderColor: black
+TiMidity*lyric_text*Foreground: #c0c0c0
+TiMidity*lyric_text*Background: #444444
+TiMidity*lyric_text*Scrollbar*Background: #666666
+TiMidity*TraceBackground: #4e5945
+TiMidity*VelForeground: #c0a080
+TiMidity*VelDrumForeground: #c08080
+TiMidity*VolForeground: #c0b0b0
+TiMidity*PanForeground: #a0a0c0
+TiMidity*ReverbColor: #c0c080
+TiMidity*CaptionColor: #a0a0a0
+TiMidity*ExpForeground: #80c0c0
+TiMidity*ChorusColor: #c0b080
+TiMidity*WhiteKeyColor: #d8d8d8
+TiMidity*trace_vport*background: #666666
+TiMidity*load_dialog*background: #666666
+TiMidity*load_dialog*Command.background: #666666
+TiMidity*load_dialog.label.background: #666666
+TiMidity*load_dialog*value.background: #666666
+TiMidity*load_dialog*value.MultiSrc.background: #666666
+TiMidity*load_dialog*value.MultiSink.background: #666666
+TiMidity*load_dialog.label*foreground: #c0c0c0
+TiMidity*load_dialog*cwd_label*foreground: #c0c0c0
+TiMidity*load_dialog*cwd_info*foreground: #c0c0c0
+TiMidity*popup_file*background: #666666
+TiMidity*popup_option*background: #666666
+TiMidity*popup_about*background: #666666
+TiMidity*popup_confirm*background: #666666
+TiMidity*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*Dialog*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*MenuButton*fontSet: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*textfontset: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
+TiMidity*SmeBSB.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*Command*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*Dialog*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*Label*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,*
+TiMidity*cwd_label.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*Text*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*file_menubutton.file_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*title_menubutton.title_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*time_label.fontSet: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*time_label*cwd_info.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*volume_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*tune_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*,*
+TiMidity*load_dialog.label.fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_abox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_cform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_sform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_optform*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,-*-fixed-medium-r-normal--14-*-*-*-*-*-*-*,*
+TiMidity*popup_wbox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*,*
+++ /dev/null
-! TiMidity.ad -- app-defaults file for TiMidity++ XAW interface
-! Created by Yoshishige Arai <ryo2@on.rim.or.jp>
-! Modified by Chisato Yamauchi <cyamauch@hst.phyas.aichi-edu.ac.jp>
-
-TiMidity*international: True
-TiMidity*inputMethod: none
-TiMidity*gradientBar: True
-TiMidity*highlightThickness: 1
-TiMidity*BitmapDir: @pkglibdir@/bitmaps/
-TiMidity*file_simplemenu*international: True
-TiMidity*file_simplemenu.load.label: Load (Meta-N)
-TiMidity*file_simplemenu.saveconfig.label: Save Config (Meta-S)
-TiMidity*file_simplemenu.hidetext.label: (Un)Hide Messages (Ctrl-M)
-TiMidity*file_simplemenu.hidetrace.label: (Un)Hide Trace (Ctrl-T)
-TiMidity*file_simplemenu.shuffle.label: Shuffle (Ctrl-S)
-TiMidity*file_simplemenu.repeat.label: Repeat (Ctrl-R)
-TiMidity*file_simplemenu.autostart.label: Auto Start
-TiMidity*file_simplemenu.autoquit.label: Auto Exit
-TiMidity*file_simplemenu.filelist.label: File List (Ctrl-F)
-TiMidity*file_simplemenu.modes.label: Extend Modes (Ctrl-O)
-TiMidity*file_simplemenu.about.label: About
-TiMidity*file_simplemenu.quit.label: Quit (Meta-Q, Q)
-TiMidity*load_dialog.label: File Name
-TiMidity*load_dialog.OK.label: OK
-TiMidity*load_dialog.add.label: Add ALL
-TiMidity*load_dialog.cancel.label: Cancel
-TiMidity*flist_cmdbox.fplaybutton.label: Play
-TiMidity*flist_cmdbox.fdeletebutton.label: Delete
-TiMidity*flist_cmdbox.fdelallbutton.label: Delete ALL
-TiMidity*popup_abox.OK.label: OK
-TiMidity*modul_box.modul_lbl.label: Modulation control
-TiMidity*porta_box.porta_lbl.label: Portamento control
-TiMidity*nrpnv_box.nrpnv_lbl.label: NRPN Vibration
-TiMidity*reverb_box.reverb_lbl.label: Reverb control
-TiMidity*chorus_box.chorus_lbl.label: Chorus control
-TiMidity*chpressure_box.chpressure_lbl.label: Channel Pressure control
-TiMidity*overlapvoice_box.overlapv_lbl.label: Allow Multiple Same Notes
-TiMidity*txtmeta_box.txtmeta_lbl.label: Tracing All Text Meta Events
-TiMidity*closebutton.label: Close
-TiMidity*base_form.translations: #override\n\
- ~Ctrl Meta<Key>s: do-menu(101)\n\
- Ctrl<Key>m: do-menu(102)\n\
- Ctrl<Key>t: do-menu(103)\n\
- Ctrl<Key>s: do-menu(104)\n\
- Ctrl<Key>r: do-menu(105)\n\
- ~Ctrl Meta<Key>n: do-load()\n\
- <Key>Right: do-next()\n\
- ~Meta<Key>n: do-next()\n\
- <Key>Left: do-prev()\n\
- <Key>p: do-prev()\n\
- <Key>KP_Enter: do-play()\n\
- <Key>Return: do-play()\n\
- ~Ctrl<Key>r: do-play()\n\
- ~Ctrl<Key>f: do-forward()\n\
- ~Ctrl<Key>b: do-back()\n\
- ~Ctrl<Key>space: do-pause()\n\
- ~Ctrl<Key>s: do-stop()\n\
- <Key>Up: do-volupdown(10)\n\
- ~Ctrl Shift<Key>v: do-volupdown(10)\n\
- <Key>Down: do-volupdown(-10)\n\
- ~Ctrl ~Shift<Key>v: do-volupdown(-10)\n\
- <Key>KP_Add: do-key()\n\
- ~Ctrl<Key>plus: do-key()\n\
- <Key>KP_Subtract: do-key(1)\n\
- ~Shift<Key>-: do-key(1)\n\
- ~Ctrl<Key>greater: do-speed()\n\
- ~Ctrl<Key>less: do-speed(1)\n\
- ~Ctrl Shift<Key>o: do-voice(1)\n\
- ~Ctrl ~Shift<Key>o: do-voice()\n\
- ~Ctrl<Key>g: do-sndspec()\n\
- ~Ctrl<Key>x: do-exchange()\n\
- ~Ctrl<Key>t: do-toggletrace()\n\
- <Key>l: do-filelist()\n\
- Ctrl<Key>f: do-filelist()\n\
- Ctrl<Key>o: do-options()\n\
- <Key>a: do-about()\n\
- <ConfigureNotify>: do-resize()\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*menu_width: 300
-TiMidity*menu_box.borderWidth: 0
-TiMidity*MenuButton.translations: \
- <EnterWindow>: highlight()\n\
- <LeaveWindow>: reset()\n\
- Any<BtnDown>: reset() fix-menu() PopupMenu()
-TiMidity*Command*international: True
-TiMidity*file_menubutton.menuName: file_simplemenu
-TiMidity*file_menubutton.width: 60
-TiMidity*file_menubutton.height: 26
-TiMidity*file_menubutton.horizDistance: 6
-TiMidity*file_menubutton.vertDistance: 4
-TiMidity*file_menubutton.shadowWidth: 1
-TiMidity*title_menubutton.menuName: title_simplemenu
-TiMidity*title_menubutton.width: 210
-TiMidity*title_menubutton.height: 26
-TiMidity*title_menubutton.resize: false
-TiMidity*title_menubutton.fromHoriz: file_menubutton
-TiMidity*title_menubutton.horizDistance: 6
-TiMidity*title_menubutton.vertDistance: 4
-TiMidity*title_menubutton.shadowWidth: 1
-TiMidity*time_label.label: time / mode
-TiMidity*time_label.width: 92
-TiMidity*time_label.height: 26
-TiMidity*time_label.resize: false
-TiMidity*time_label.fromHoriz: title_menubutton
-TiMidity*time_label.horizDistance: 1
-TiMidity*time_label.vertDistance: 4
-TiMidity*time_label.shadowWidth: 1
-TiMidity*time_label.translations: #override\n\
- <Btn2Down>: do-menu(103)\n\
- <Btn3Down>: do-exchange()
-TiMidity*button_box.height: 40
-TiMidity*button_box.horizDistance: 4
-TiMidity*button_box.borderWidth: 0
-TiMidity*play_button.width: 32
-TiMidity*play_button.height: 32
-TiMidity*play_button.horizDistance: 1
-TiMidity*play_button.vertDistance: 9
-TiMidity*pause_button.width: 32
-TiMidity*pause_button.height: 32
-TiMidity*pause_button.horizDistance: 1
-TiMidity*pause_button.vertDistance: 1
-TiMidity*stop_button.width: 32
-TiMidity*stop_button.height: 32
-TiMidity*stop_button.horizDistance: 1
-TiMidity*stop_button.vertDistance: 1
-TiMidity*prev_button.width: 32
-TiMidity*prev_button.height: 32
-TiMidity*prev_button.horizDistance: 1
-TiMidity*prev_button.vertDistance: 1
-TiMidity*back_button.width: 32
-TiMidity*back_button.height: 32
-TiMidity*back_button.horizDistance: 1
-TiMidity*back_button.vertDistance: 1
-TiMidity*fwd_button.width: 32
-TiMidity*fwd_button.height: 32
-TiMidity*fwd_button.horizDistance: 1
-TiMidity*fwd_button.vertDistance: 1
-TiMidity*next_button.width: 32
-TiMidity*next_button.height: 32
-TiMidity*next_button.horizDistance: 1
-TiMidity*next_button.vertDistance: 1
-TiMidity*quit_button.width: 32
-TiMidity*quit_button.height: 32
-TiMidity*quit_button.horizDistance: 1
-TiMidity*quit_button.vertDistance: 1
-TiMidity*random_button.width: 32
-TiMidity*random_button.height: 32
-TiMidity*random_button.horizDistance: 4
-TiMidity*random_button.vertDistance: 1
-TiMidity*repeat_button.width: 32
-TiMidity*repeat_button.height: 32
-TiMidity*repeat_button.horizDistance: 1
-TiMidity*repeat_button.vertDistance: 1
-TiMidity*volume_label.vertDistance: 0
-TiMidity*volume_label.borderWidth: 0
-TiMidity*volume_box.vertDistance: 2
-TiMidity*volume_box.borderWidth: 0
-TiMidity*volume_bar.length: 330
-TiMidity*volume_bar.translations: #override\n\
- ~Ctrl Shift<Btn1Down>: do-volupdown(-50)\n\
- ~Ctrl Shift<Btn3Down>: do-volupdown(50)\n\
- Ctrl ~Shift<Btn1Down>: do-volupdown(-5)\n\
- Ctrl ~Shift<Btn3Down>: do-volupdown(5)\n\
- <Btn1Down>: MoveThumb()\n\
- <BtnUp>: NotifyScroll(FullLength) EndScroll()
-TiMidity*tune_label.label: ----
-TiMidity*tune_label.horizDistance: 0
-TiMidity*tune_label.vertDistance: 0
-TiMidity*tune_label0.horizDistance: 0
-TiMidity*tune_box.vertDistance: 2
-TiMidity*tune_box.borderWidth: 0
-TiMidity*tune_bar.length: 330
-TiMidity*tune_bar.translations: #override\n\
- <Btn1Up>: do-tuneset()\n\
- <Btn3Up>: do-tuneslide()\n\
- <Btn1Down>: MoveThumb()\n\
- <BtnUp>: NotifyScroll(FullLength) EndScroll()
-TiMidity*lyric_text.international: True
-TiMidity*lyric_text.height: 120
-TiMidity*lyric_text.fromVert: tune_box
-TiMidity*lyric_text.horizDistance: 6
-TiMidity*lyric_text.vertDistance: 4
-TiMidity*lyric_text.borderWidth: 1
-TiMidity*lyric_text.scrollVertical: WhenNeeded
-TiMidity*lyric_text.translations: #override\n\
- <Btn2Down>: do-deltext()
-TiMidity*trace.vertDistance: 2
-TiMidity*trace.borderWidth: 1
-TiMidity*trace.translations: #override\n\
- <Btn1Down>: do-toggletrace()\n\
- <EnterNotify>: do-revcaption()\n\
- <LeaveNotify>: do-revcaption()\n\
- <Expose>: draw-trace()
-TiMidity*trace_vport.borderWidth: 1
-TiMidity*popup_load.title: TiMidity <Load File>
-TiMidity*popup_loadform.height: 400
-TiMidity*load_dialog.borderWidth: 0
-TiMidity*load_dialog.height: 132
-TiMidity*load_dialog.value.translations: #override\n\
- <Key>Escape: do-dialog-button(1)\n\
- Ctrl ~Shift<Key>g: do-dialog-button(1)\n\
- ~Ctrl<Key>KP_Enter: do-chgdir()\n\
- ~Ctrl<Key>Return: do-chgdir()\n\
- <Key>BackSpace: do-backspace() delete-previous-character()\n\
- ~Ctrl ~Meta<Key>Tab: do-complete() end-of-line()
-TiMidity*popup_file.title: TiMidity <File List>
-TiMidity*popup_fbox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- <Key>Down: do-flistmove(1)\n\
- <Key>n: do-flistmove(1)\n\
- <Key>Up: do-flistmove(-1)\n\
- <Key>p: do-flistmove(-1)\n\
- <Key>Next: do-flistmove(5)\n\
- <Key>Left: do-flistmove(5)\n\
- <Key>Prior: do-flistmove(-5)\n\
- <Key>Right: do-flistmove(-5)\n\
- <Key>KP_Enter: do-fselect()\n\
- <Key>Return: do-fselect()\n\
- Ctrl<Key>m: do-fselect()\n\
- ~Ctrl<Key>r: do-fselect()\n\
- <Key>d: do-fdelete()\n\
- ~Ctrl<Key>f: do-forward()\n\
- ~Ctrl<Key>b: do-back()\n\
- <Key>space: do-pause()\n\
- <Key>s: do-stop()\n\
- Shift<Key>v: do-volupdown(10)\n\
- ~Shift<Key>v: do-volupdown(-10)\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*popup_option.title: TiMidity <Extend Modes>
-TiMidity*popup_optbox*international: True
-TiMidity*popup_optbox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- ~Ctrl<Key>q: do-quit()
-TiMidity*popup_about.title: Information
-TiMidity*popup_abox.translations: #override\n\
- ~Ctrl<Key>c: do-closeparent()\n\
- <Key>KP_Enter: do-closeparent()\n\
- <Key>Return: do-closeparent()
-TiMidity*foreground: #c0c0c0
-TiMidity*background: #171717
-TiMidity*BoxColor: #666666
-TiMidity*Scrollbar*background: gray82
-TiMidity*ButtonForeground: #c0c0c0
-TiMidity*ButtonBackground: #444444
-TiMidity*ToggleForeground: #c0c0f0
-TiMidity*MenuButtonBackground: #839573
-TiMidity*menu_box*Foreground: #000000
-TiMidity*menu_box*SimpleMenu*Foreground: #c0c0c0
-TiMidity*Command.background: gray78
-TiMidity*Label.foreground: black
-TiMidity*Label.background: #CCFF33
-TiMidity*Text*background: gray82
-TiMidity*Text*scrollbar*background: gray82
-TiMidity*TextBackground: #666666
-TiMidity*Text2Background: #4e5945
-TiMidity*Dialog.Command.background: gray78
-TiMidity*Dialog.Text.background: gray82
-TiMidity*lyric_text*Foreground: #c0c0c0
-TiMidity*lyric_text*Background: #444444
-TiMidity*lyric_text*Scrollbar*Background: #666666
-TiMidity*TraceBackground: #4e5945
-TiMidity*VelForeground: #c0a080
-TiMidity*VelDrumForeground: #c08080
-TiMidity*VolForeground: #c0b0b0
-TiMidity*PanForeground: #a0a0c0
-TiMidity*ReverbColor: #c0c080
-TiMidity*CaptionColor: #a0a0a0
-TiMidity*ExpForeground: #80c0c0
-TiMidity*ChorusColor: #c0b080
-TiMidity*WhiteKeyColor: #d8d8d8
-TiMidity*trace_vport*background: #666666
-TiMidity*load_dialog.label.background: gray67
-TiMidity*popup_load*Viewport*background: #666666
-TiMidity*popup_load*load_dialog.Command*background: #666666
-TiMidity*popup_load*load_dialog*label*background: #666666
-TiMidity*popup_load*load_dialog*value.background: #666666
-TiMidity*popup_load*load_dialog*value.MultiSrc.background: #666666
-TiMidity*popup_load*load_dialog*value.MultiSink.background: #666666
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Label.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Toggle.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Toggle.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Command.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Command.background: #c0c0c0
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.background: #e7e7e7
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.borderColor: #6f6f6f
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSrc.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSrc.background: #e7e7e7
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSink.foreground: #000000
-TiMidity*popup_load*load_dialog*value*TransientShell.Form.Text.MultiSink.background: #e7e7e7
-TiMidity*popup_load*popup_loadform*load_dialog*label*foreground: #c0c0c0
-TiMidity*popup_load*popup_loadform*cwd_label*foreground: #c0c0c0
-TiMidity*popup_load*popup_loadform*cwd_info*foreground: #c0c0c0
-TiMidity*popup_file*background: #666666
-TiMidity*popup_option*background: #666666
-TiMidity*popup_about*background: #666666
-TiMidity*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*Form*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*MenuButton*fontSet: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
-TiMidity*TextFontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*SmeBSB.fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*Command*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*
-TiMidity*List*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*Label*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*
-TiMidity*cwd_label.font: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*Text*fontSet: -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
-TiMidity*file_menubutton.file_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*title_menubutton.title_simplemenu*fontSet: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*time_label.font: -adobe-helvetica-bold-r-normal--14-*-*-*-*-*-*-*
-TiMidity*time_label*cwd_info.font: -adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
-TiMidity*volume_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*
-TiMidity*tune_box*fontSet: -adobe-helvetica-bold-r-normal--12-*-*-*-*-*-*-*
-TiMidity*popup_loadform.load_dialog.label.fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*
-TiMidity*popup_abox*fontSet: -adobe-helvetica-bold-o-normal--14-*-*-*-*-*-*-*
--- /dev/null
+#define arrow_width 32
+#define arrow_height 14
+static unsigned char arrow_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
+ 0x08, 0x06, 0x00, 0x00, 0x88, 0x1f, 0x00, 0x00, 0xe8, 0x07, 0x00, 0x00,
+ 0xf8, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
--- /dev/null
+#define check_width 11
+#define check_height 11
+static unsigned char check_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x0e, 0x06, 0x0c, 0x03, 0x8c, 0x03, 0xcc, 0x01,
+ 0xec, 0x00, 0x7c, 0x00, 0x3c, 0x00, 0x18, 0x00, 0x00, 0x00};
--- /dev/null
+#define fast_width 32
+#define fast_height 32
+static unsigned char fast_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x00,
+ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfe, 0xf0, 0x00, 0x00, 0xff, 0xcf, 0x03,
+ 0x00, 0xff, 0xcf, 0x03, 0xc0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x03,
+ 0xf8, 0xc3, 0xff, 0x00, 0xf8, 0xc3, 0xff, 0x00, 0x66, 0x00, 0xf0, 0x00,
+ 0x66, 0x00, 0xf0, 0x00, 0x18, 0x00, 0x00, 0x1f, 0x18, 0x00, 0x00, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define keydown_width 32
+#define keydown_height 32
+static unsigned char keydown_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
+ 0x00, 0x8f, 0xff, 0x01, 0x00, 0x83, 0xff, 0x01, 0x00, 0x83, 0xff, 0x01,
+ 0x00, 0x03, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00,
+ 0x00, 0x03, 0x3c, 0x00, 0xfc, 0x03, 0x3c, 0x00, 0xfe, 0x03, 0x18, 0x00,
+ 0xfe, 0x03, 0x18, 0x00, 0xfe, 0x03, 0x18, 0x00, 0xfc, 0x00, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define keyup_width 32
+#define keyup_height 32
+static unsigned char keyup_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
+ 0x00, 0x0f, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x03, 0x0c, 0x00,
+ 0x00, 0x03, 0x1e, 0x00, 0x00, 0x03, 0x1e, 0x00, 0x00, 0x83, 0x7f, 0x00,
+ 0x00, 0x83, 0x7f, 0x00, 0xfc, 0x83, 0x7f, 0x00, 0xfe, 0xc3, 0xff, 0x00,
+ 0xfe, 0xc3, 0xff, 0x00, 0xfe, 0xc3, 0xff, 0x00, 0xfc, 0x00, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+#define off_width 32
+#define off_height 16
+static unsigned char off_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xe3, 0xef, 0x0f, 0x60, 0xc6, 0xcc, 0x0c, 0x30, 0xcc, 0xc8, 0x08,
+ 0x30, 0xcc, 0xc2, 0x02, 0x30, 0xcc, 0xc3, 0x03, 0x30, 0xcc, 0xc2, 0x02,
+ 0x30, 0xcc, 0xc0, 0x00, 0x60, 0xc6, 0xc0, 0x00, 0xc0, 0xe3, 0xe1, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, };
--- /dev/null
+#define on_width 32
+#define on_height 16
+static unsigned char on_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1e, 0xe7, 0x00, 0x00, 0x33, 0x4e, 0x00, 0x80, 0x61, 0x4e, 0x00,
+ 0x80, 0x61, 0x5a, 0x00, 0x80, 0x61, 0x5a, 0x00, 0x80, 0x61, 0x72, 0x00,
+ 0x80, 0x61, 0x72, 0x00, 0x00, 0x33, 0x62, 0x00, 0x00, 0x1e, 0x47, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, };
--- /dev/null
+#define slow_width 32
+#define slow_height 32
+static unsigned char slow_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,
+ 0xe0, 0xff, 0x01, 0x00, 0xe0, 0xff, 0x01, 0x00, 0xe0, 0xff, 0x67, 0x00,
+ 0xe0, 0xff, 0x67, 0x00, 0xf8, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0x7f, 0x00,
+ 0xe0, 0x7f, 0x06, 0x00, 0xe0, 0x7f, 0x06, 0x00, 0x60, 0xe6, 0x07, 0x00,
+ 0x60, 0xe6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- /dev/null
+/*
+ TiMidity++ -- MIDI to WAVE converter and player
+ Copyright (C) 1999-2004 Masanao Izumo <iz@onicos.co.jp>
+ Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+
+ xtrace_i.c - Trace window drawing for X11 based systems
+ based on code by Yoshishige Arai <ryo2@on.rim.or.jp>
+ modified by Yair Kalvariski <cesium2@gmail.com>
+*/
+
+#include "x_trace.h"
+#include <stdlib.h>
+#include "timer.h"
+
+enum {
+ CL_C, /* column 0 = channel */
+ CL_VE, /* column 1 = velocity */
+ CL_VO, /* column 2 = volume */
+ CL_EX, /* column 3 = expression */
+ CL_PR, /* column 4 = program */
+ CL_PA, /* column 5 = panning */
+ CL_PI, /* column 6 = pitch bend */
+ CL_IN, /* column 7 = instrument name */
+ KEYBOARD,
+ TCOLUMN,
+ CL_BA = 6, /* column 6 = bank */
+ CL_RE, /* column 7 = reverb */
+ CL_CH, /* column 8 = chorus */
+ KEYBOARD2,
+ T2COLUMN
+};
+
+typedef struct {
+ int y;
+ int l;
+} KeyL;
+
+typedef struct {
+ KeyL k[3];
+ int xofs;
+ Pixel col;
+} ThreeL;
+
+typedef struct {
+ const int col; /* column number */
+ const char **cap; /* caption strings array */
+ const int *w; /* column width array */
+ const int *ofs; /* column offset array */
+} Tplane;
+
+typedef struct {
+ int is_drum[MAX_TRACE_CHANNELS];
+ int8 c_flags[MAX_TRACE_CHANNELS];
+ int8 v_flags[MAX_TRACE_CHANNELS];
+ int16 cnote[MAX_TRACE_CHANNELS];
+ int16 ctotal[MAX_TRACE_CHANNELS];
+ int16 cvel[MAX_TRACE_CHANNELS];
+ int16 reverb[MAX_TRACE_CHANNELS];
+ Channel channel[MAX_TRACE_CHANNELS];
+ char *inst_name[MAX_TRACE_CHANNELS];
+ int pitch, poffset;
+ unsigned int tempo, timeratio;
+ int xaw_i_voices, last_voice;
+ int tempo_width, pitch_width, voices_num_width;
+ int plane, multi_part, visible_channels;
+ Pixel barcol[MAX_TRACE_CHANNELS];
+ Pixmap layer[2], gradient_pixmap[T2COLUMN];
+ GC gcs, gct, gc_xcopy, gradient_gc[T2COLUMN];
+ Window trace;
+ Boolean g_cursor_is_in;
+ Display *disp;
+ tconfig *cfg;
+ char *title;
+} PanelInfo;
+
+#define gcs Panel->gcs
+#define gct Panel->gct
+#define gc_xcopy Panel->gc_xcopy
+#define gradient_gc Panel->gradient_gc
+#define gradient_pixmap Panel->gradient_pixmap
+#define plane Panel->plane
+#define layer Panel->layer
+
+static PanelInfo *Panel;
+static short titlefont_ascent, tracefont_ascent;
+static ThreeL *keyG;
+
+static const char *caption[TCOLUMN] =
+{"ch", " vel", " vol", "expr", "prog", "pan", "pit", " instrument",
+ " keyboard"};
+static const char *caption2[T2COLUMN] =
+{"ch", " vel", " vol", "expr", "prog", "pan", "bnk", "reverb", "chorus",
+ " keyboard"};
+
+static const int BARH_SPACE[TCOLUMN] = {22, 60, 40, 36, 36, 36, 30, 106, 304};
+#define BARH_OFS0 (TRACEH_OFS)
+#define BARH_OFS1 (BARH_OFS0+22)
+#define BARH_OFS2 (BARH_OFS1+60)
+#define BARH_OFS3 (BARH_OFS2+40)
+#define BARH_OFS4 (BARH_OFS3+36)
+#define BARH_OFS5 (BARH_OFS4+36)
+#define BARH_OFS6 (BARH_OFS5+36)
+#define BARH_OFS7 (BARH_OFS6+30)
+#define BARH_OFS8 (BARH_OFS7+106)
+static const int bar0ofs[] = {BARH_OFS0, BARH_OFS1, BARH_OFS2, BARH_OFS3,
+ BARH_OFS4, BARH_OFS5, BARH_OFS6, BARH_OFS7, BARH_OFS8};
+
+static const int BARH2_SPACE[T2COLUMN] = {22, 60, 40, 36, 36, 36,
+ 30, 53, 53, 304};
+#define BARH2_OFS0 (TRACEH_OFS)
+#define BARH2_OFS1 (BARH2_OFS0+22)
+#define BARH2_OFS2 (BARH2_OFS1+60)
+#define BARH2_OFS3 (BARH2_OFS2+40)
+#define BARH2_OFS4 (BARH2_OFS3+36)
+#define BARH2_OFS5 (BARH2_OFS4+36)
+#define BARH2_OFS6 (BARH2_OFS5+36)
+#define BARH2_OFS7 (BARH2_OFS6+30)
+#define BARH2_OFS8 (BARH2_OFS7+53)
+#define BARH2_OFS9 (BARH2_OFS8+53)
+static const int bar1ofs[] = {BARH2_OFS0, BARH2_OFS1, BARH2_OFS2, BARH2_OFS3,
+ BARH2_OFS4, BARH2_OFS5, BARH2_OFS6, BARH2_OFS7, BARH2_OFS8, BARH2_OFS9};
+
+static const Tplane pl[] = {
+ {TCOLUMN, caption, BARH_SPACE, bar0ofs},
+ {T2COLUMN, caption2, BARH2_SPACE, bar1ofs},
+};
+
+#define KEY_NUM 111
+#define BARSCALE2 0.31111 /* velocity scale (60-4)/180 */
+#define BARSCALE3 0.28125 /* volume scale (40-4)/128 */
+#define BARSCALE4 0.25 /* expression scale (36-4)/128 */
+#define BARSCALE5 0.385827 /* expression scale (53-4)/128 */
+
+#define FLAG_NOTE_OFF 1
+#define FLAG_NOTE_ON 2
+#define FLAG_BANK 1
+#define FLAG_PROG 2
+#define FLAG_PROG_ON 4
+#define FLAG_PAN 8
+#define FLAG_SUST 16
+#define FLAG_BENDT 32
+
+#define VOICES_NUM_OFS 6
+#define VOICENUM_WIDTH 56
+#define TEMPO_WIDTH 56
+#define TEMPO_SPACE 6
+#define PITCH_WIDTH 106
+#define PITCH_SPACE 6
+#define TTITLE_OFS 120
+
+#define VISIBLE_CHANNELS Panel->visible_channels
+#define VISLOW Panel->multi_part
+#define XAWLIMIT(ch) ((VISLOW <= (ch)) && ((ch) < (VISLOW+VISIBLE_CHANNELS)))
+
+#define disp Panel->disp
+
+#define boxcolor Panel->cfg->box_color
+#define capcolor Panel->cfg->caption_color
+#define chocolor Panel->cfg->cho_color
+#define expcolor Panel->cfg->expr_color
+#define pancolor Panel->cfg->pan_color
+#define playcolor Panel->cfg->play_color
+#define revcolor Panel->cfg->rev_color
+#define rimcolor Panel->cfg->rim_color
+#define suscolor Panel->cfg->sus_color
+#define textcolor Panel->cfg->common_fgcolor
+#define textbgcolor Panel->cfg->text_bgcolor
+#define tracecolor Panel->cfg->trace_bgcolor
+#define volcolor Panel->cfg->volume_color
+
+#define gradient_bar Panel->cfg->gradient_bar
+#define black Panel->cfg->black_key_color
+#define white Panel->cfg->white_key_color
+
+#define trace_height_raw Panel->cfg->trace_height
+#define trace_height_nf (Panel->cfg->trace_height - TRACE_FOOT)
+#define trace_width Panel->cfg->trace_width
+
+#define trace_font Panel->cfg->trace_font
+#define ttitle_font Panel->cfg->ttitle_font
+
+#define UNTITLED_STR Panel->cfg->untitled
+/* Privates */
+
+static int bitcount(int);
+static void ctl_channel_note(int, int, int);
+static void drawBar(int, int, int, int, Pixel);
+static void drawKeyboardAll(Drawable, GC);
+static void draw1Note(int, int, int);
+static void drawProg(int, int, Boolean);
+static void drawPan(int, int, Boolean);
+static void draw1Chan(int, int, char);
+static void drawVol(int, int);
+static void drawExp(int, int);
+static void drawPitch(int, int);
+static void drawInstname(int, char *);
+static void drawDrumPart(int, int);
+static void drawBank(int, int);
+static void drawReverb(int, int);
+static void drawChorus(int, int);
+static void drawVoices(void);
+static void drawTitle(char *);
+static void drawTempo(void);
+static void drawOverallPitch(int, int);
+static void drawMute(int, int);
+static int getdisplayinfo(RGBInfo *);
+static int sftcount(int *);
+
+static int bitcount(int d) {
+ int rt = 0;
+
+ while ((d & 0x01) == 0x01) {
+ d >>= 1;
+ rt++;
+ }
+ return rt;
+}
+
+static int sftcount(int *mask) {
+ int rt = 0;
+
+ while ((*mask & 0x01) == 0) {
+ (*mask) >>= 1;
+ rt++;
+ }
+ return rt;
+}
+
+static int getdisplayinfo(RGBInfo *rgb) {
+ XWindowAttributes xvi;
+ XGetWindowAttributes(disp, Panel->trace, &xvi);
+ if (xvi.depth >= 16) {
+ rgb->Red_depth = (xvi.visual)->red_mask;
+ rgb->Green_depth = (xvi.visual)->green_mask;
+ rgb->Blue_depth = (xvi.visual)->blue_mask;
+ rgb->Red_sft = sftcount(&(rgb->Red_depth));
+ rgb->Green_sft = sftcount(&(rgb->Green_depth));
+ rgb->Blue_sft = sftcount(&(rgb->Blue_depth));
+ rgb->Red_depth = bitcount(rgb->Red_depth);
+ rgb->Green_depth = bitcount(rgb->Green_depth);
+ rgb->Blue_depth = bitcount(rgb->Blue_depth);
+ }
+ return xvi.depth;
+}
+
+static void drawBar(int ch, int len, int xofs, int column, Pixel color) {
+ static Pixel column1color0;
+ /* static Pixmap gradient_pixmap[T2COLUMN];
+ static GC gradient_gc[T2COLUMN]; */
+ static XColor x_boxcolor;
+ static XGCValues gv;
+ static RGBInfo rgb;
+ static int gradient_set[T2COLUMN], depth, init = 1;
+ int col, i, screen;
+ XColor x_color;
+
+ ch -= VISLOW;
+ screen = DefaultScreen(disp);
+ if (init) {
+ for(i=0;i<T2COLUMN;i++) gradient_set[i] = 0;
+ depth = getdisplayinfo(&rgb);
+ if ((16 <= depth) && (gradient_bar)) {
+ x_boxcolor.pixel = boxcolor;
+ XQueryColor(disp, DefaultColormap(disp, 0), &x_boxcolor);
+ gv.fill_style = FillTiled;
+ gv.fill_rule = WindingRule;
+ }
+ init = 0;
+ }
+ if ((16 <= depth) && (gradient_bar)) {
+ if (column < T2COLUMN) {
+ col = column;
+ if (column == 1) {
+ if (gradient_set[0] == 0) {
+ column1color0 = color;
+ col = 0;
+ }
+ else if ((gradient_set[1] == 0) && (column1color0 != color)) {
+ col = 1;
+ }
+ else {
+ if (column1color0 == color) col = 0;
+ else col = 1;
+ }
+ }
+ if (gradient_set[col] == 0) {
+ unsigned long pxl;
+ int r, g, b;
+
+ gradient_pixmap[col] = XCreatePixmap(disp, Panel->trace,
+ BARH2_SPACE[column], 1, DefaultDepth(disp, screen));
+ x_color.pixel = color;
+ XQueryColor(disp, DefaultColormap(disp, 0), &x_color);
+ for (i=0;i<BARH2_SPACE[column];i++) {
+ r = x_boxcolor.red +
+ (x_color.red - x_boxcolor.red) * i / BARH2_SPACE[column];
+ g = x_boxcolor.green +
+ (x_color.green - x_boxcolor.green) * i / BARH2_SPACE[column];
+ b = x_boxcolor.blue +
+ (x_color.blue - x_boxcolor.blue) * i / BARH2_SPACE[column];
+ if (r<0) r = 0;
+ if (g<0) g = 0;
+ if (b<0) b = 0;
+ r >>= 8;
+ g >>= 8;
+ b >>= 8;
+ if (r>255) r = 255;
+ if (g>255) g = 255;
+ if (b>255) b = 255;
+ pxl = (r >> (8-rgb.Red_depth)) << rgb.Red_sft;
+ pxl |= (g >> (8-rgb.Green_depth)) << rgb.Green_sft;
+ pxl |= (b >> (8-rgb.Blue_depth)) << rgb.Blue_sft;
+ XSetForeground(disp, gct, pxl);
+ XDrawPoint(disp, gradient_pixmap[col], gct, i, 0);
+ }
+ gv.tile = gradient_pixmap[col];
+ gradient_gc[col] = XCreateGC(disp, Panel->trace,
+ GCFillStyle | GCFillRule | GCTile, &gv);
+ gradient_set[col] = 1;
+ }
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp, Panel->trace, gct,
+ xofs+len+2, CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[column] - len -4, BAR_HEIGHT);
+ gv.ts_x_origin = xofs + 2 - BARH2_SPACE[column] + len;
+ XChangeGC(disp, gradient_gc[col], GCTileStipXOrigin, &gv);
+ XFillRectangle(disp, Panel->trace, gradient_gc[col],
+ xofs+2, CHANNEL_HEIGHT(ch)+2,
+ len, BAR_HEIGHT);
+ }
+ }
+ else {
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp, Panel->trace, gct,
+ xofs+len+2, CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[column] -len - 4, BAR_HEIGHT);
+ XSetForeground(disp, gct, color);
+ XFillRectangle(disp, Panel->trace, gct,
+ xofs+2, CHANNEL_HEIGHT(ch)+2,
+ len, BAR_HEIGHT);
+ }
+}
+
+static void drawProg(int ch, int val, Boolean do_clean) {
+ char s[4];
+
+ ch -= VISLOW;
+ if (do_clean == True) {
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp,Panel->trace,gct,
+ pl[plane].ofs[CL_PR]+2,CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[CL_PR]-4,BAR_HEIGHT);
+ }
+ XSetForeground(disp, gct, textcolor);
+ sprintf(s, "%3d", val);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_PR]+5, CHANNEL_HEIGHT(ch)+16, s, 3);
+}
+
+static void drawPan(int ch, int val, Boolean setcolor) {
+ int ap, bp;
+ int x;
+ XPoint pp[3];
+
+ if (val < 0) return;
+
+ ch -= VISLOW;
+ if (setcolor == True) {
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp, Panel->trace, gct,
+ pl[plane].ofs[CL_PA]+2, CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[CL_PA]-4, BAR_HEIGHT);
+ XSetForeground(disp, gct, pancolor);
+ }
+ x = pl[plane].ofs[CL_PA] + 3;
+ ap = 31 * val/127;
+ bp = 31 - ap - 1;
+ pp[0].x = ap + x; pp[0].y = 12 + BAR_SPACE*(ch+1);
+ pp[1].x = bp + x; pp[1].y = 8 + BAR_SPACE*(ch+1);
+ pp[2].x = bp + x; pp[2].y = 16 + BAR_SPACE*(ch+1);
+ XFillPolygon(disp, Panel->trace, gct, pp, 3,
+ (int)Nonconvex, (int)CoordModeOrigin);
+}
+
+static void draw1Chan(int ch, int val, char cmd) {
+ if ((cmd == '*') || (cmd == '&'))
+ drawBar(ch, (int)(val*BARSCALE2), pl[plane].ofs[CL_VE],
+ CL_VE, Panel->barcol[ch]);
+}
+
+static void drawVol(int ch, int val) {
+ drawBar(ch, (int)(val*BARSCALE3), pl[plane].ofs[CL_VO], CL_VO, volcolor);
+}
+
+static void drawExp(int ch, int val) {
+ drawBar(ch, (int)(val*BARSCALE4), pl[plane].ofs[CL_EX], CL_EX, expcolor);
+}
+
+static void drawReverb(int ch, int val) {
+ drawBar(ch, (int)(val*BARSCALE5), pl[plane].ofs[CL_RE], CL_RE, revcolor);
+}
+
+static void drawChorus(int ch, int val) {
+ drawBar(ch, (int)(val*BARSCALE5), pl[plane].ofs[CL_CH], CL_CH, chocolor);
+}
+
+static void drawPitch(int ch, int val) {
+ char s[3];
+
+ ch -= VISLOW;
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp,Panel->trace,gct,
+ pl[plane].ofs[CL_PI]+2,CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[CL_PI] -4,BAR_HEIGHT);
+ XSetForeground(disp, gct, Panel->barcol[9]);
+ if (val != 0) {
+ if (val < 0) {
+ sprintf(s, "=");
+ } else {
+ if (val == 0x2000) sprintf(s, "*");
+ else if (val > 0x3000) sprintf(s, ">>");
+ else if (val > 0x2000) sprintf(s, ">");
+ else if (val > 0x1000) sprintf(s, "<");
+ else sprintf(s, "<<");
+ }
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_PI]+4, CHANNEL_HEIGHT(ch)+16, s, strlen(s));
+ }
+}
+
+static void drawInstname(int ch, char *name) {
+ int len;
+
+ if (plane != 0) return;
+ ch -= VISLOW;
+ XSetForeground(disp, gct, boxcolor);
+ XFillRectangle(disp, Panel->trace, gct,
+ pl[plane].ofs[CL_IN]+2, CHANNEL_HEIGHT(ch)+2,
+ pl[plane].w[CL_IN] -4, BAR_HEIGHT);
+ XSetForeground(disp, gct,
+ ((Panel->is_drum[ch+VISLOW])?capcolor:textcolor));
+ len = strlen(name);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_IN]+4, CHANNEL_HEIGHT(ch)+15,
+ name, (len > DISP_INST_NAME_LEN)?DISP_INST_NAME_LEN:len);
+}
+
+static void drawDrumPart(int ch, int is_drum) {
+
+ if (plane != 0) return;
+ if (is_drum) Panel->barcol[ch] = Panel->cfg->drumvelocity_color;
+ else Panel->barcol[ch] = Panel->cfg->velocity_color;
+}
+
+static void draw1Note(int ch, int note, int flag) {
+ int i, j;
+ XSegment dot[3];
+
+ j = note - 9;
+ if (j < 0) return;
+ ch -= VISLOW;
+ if (flag == '*') {
+ XSetForeground(disp, gct, playcolor);
+ } else if (flag == '&') {
+ XSetForeground(disp, gct,
+ ((keyG[j].col == black)?suscolor:Panel->barcol[0]));
+ } else {
+ XSetForeground(disp, gct, keyG[j].col);
+ }
+ for(i=0; i<3; i++) {
+ dot[i].x1 = keyG[j].xofs + i;
+ dot[i].y1 = CHANNEL_HEIGHT(ch) + keyG[j].k[i].y;
+ dot[i].x2 = dot[i].x1;
+ dot[i].y2 = dot[i].y1 + keyG[j].k[i].l;
+ }
+ XDrawSegments(disp, Panel->trace, gct, dot, 3);
+}
+
+static void ctl_channel_note(int ch, int note, int velocity) {
+ 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;
+ }
+}
+
+static void drawKeyboardAll(Drawable pix, GC gc) {
+ int i, j;
+ XSegment dot[3];
+
+ XSetForeground(disp, gc, tracecolor);
+ XFillRectangle(disp, pix, gc, 0, 0, BARH_OFS8, BAR_SPACE);
+ XSetForeground(disp, gc, boxcolor);
+ XFillRectangle(disp, pix, gc, BARH_OFS8, 0,
+ trace_width-BARH_OFS8+1, BAR_SPACE);
+ for(i=0; i<KEY_NUM; i++) {
+ XSetForeground(disp, gc, keyG[i].col);
+ for(j=0; j<3; j++) {
+ dot[j].x1 = keyG[i].xofs + j;
+ dot[j].y1 = keyG[i].k[j].y;
+ dot[j].x2 = dot[j].x1;
+ dot[j].y2 = dot[j].y1 + keyG[i].k[j].l;
+ }
+ XDrawSegments(disp, pix, gc, dot, 3);
+ }
+}
+
+static void drawBank(int ch, int val) {
+ char s[4];
+
+ ch -= VISLOW;
+ XSetForeground(disp, gct, textcolor);
+ sprintf(s, "%3d", val);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_BA], CHANNEL_HEIGHT(ch)+15, s, strlen(s));
+}
+
+static void drawVoices(void) {
+ char s[20];
+ int l;
+
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp, Panel->trace, gct, Panel->voices_num_width+4,
+ trace_height_nf+1, VOICENUM_WIDTH, TRACE_FOOT);
+ l = snprintf(s, sizeof(s), "%3d/%d", Panel->last_voice, Panel->xaw_i_voices);
+ if (l >= sizeof(s) || (l < 0)) l = sizeof(s) - 1;
+ XSetForeground(disp, gct, capcolor);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ Panel->voices_num_width+6, trace_height_nf+tracefont_ascent,
+ s, l);
+}
+
+static void drawTempo(void) {
+ char s[20];
+ int l;
+
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp, Panel->trace, gct, Panel->voices_num_width+
+ 4+VOICENUM_WIDTH+VOICES_NUM_OFS+Panel->tempo_width,
+ trace_height_nf+1, TEMPO_WIDTH+TEMPO_SPACE, TRACE_FOOT);
+ l = snprintf(s, sizeof(s), "%d/%3d%%", Panel->tempo*Panel->timeratio/100,
+ Panel->timeratio);
+ if (l >= sizeof(s) || (l < 0)) l = sizeof(s) - 1;
+ XSetForeground(disp, gct, capcolor);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ VOICES_NUM_OFS+Panel->voices_num_width+4+VOICENUM_WIDTH+
+ TEMPO_SPACE+Panel->tempo_width,
+ trace_height_nf+tracefont_ascent, s, l);
+}
+
+static void drawOverallPitch(int p, int o) {
+ int i, pitch;
+ static const char *keysig_name[] = {
+ "Cb", "Gb", "Db", "Ab", "Eb", "Bb", "F ", "C ",
+ "G ", "D ", "A ", "E ", "B ", "F#", "C#", "G#",
+ "D#", "A#"
+ };
+ char s[13];
+
+ pitch = p + ((p < 8) ? 7 : -6);
+ if (o > 0)
+ for (i = 0; i < o; i++)
+ pitch += (pitch > 10) ? -5 : 7;
+ else
+ for (i = 0; i < -o; i++)
+ pitch += (pitch < 7) ? 5 : -7;
+ if (p < 8)
+ i = snprintf(s, sizeof(s), "%s Maj (%+03d)", keysig_name[pitch], o);
+ else
+ i = snprintf(s, sizeof(s), "%s Min (%+03d)", keysig_name[pitch], o);
+ if ((i >= sizeof(s)) || (i < 0)) i = sizeof(s) - 1;
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp, Panel->trace, gct,
+ Panel->voices_num_width+4+VOICENUM_WIDTH+VOICES_NUM_OFS+
+ TEMPO_WIDTH+2*TEMPO_SPACE+Panel->tempo_width+Panel->pitch_width,
+ trace_height_nf+1, PITCH_WIDTH+PITCH_SPACE, TRACE_FOOT);
+ XSetForeground(disp, gct, capcolor);
+ XmbDrawString(disp, Panel->trace, ttitle_font, gct,
+ VOICES_NUM_OFS+Panel->voices_num_width+4+VOICENUM_WIDTH+
+ TEMPO_WIDTH+2*TEMPO_SPACE+Panel->tempo_width+PITCH_SPACE+
+ Panel->pitch_width, trace_height_nf+tracefont_ascent, s, i);
+}
+
+static void drawTitle(char *str) {
+ char *p = str;
+
+ if (!strcmp(p, "(null)")) p = (char *)UNTITLED_STR;
+ XSetForeground(disp, gcs, capcolor);
+ XmbDrawString(disp, Panel->trace, ttitle_font,
+ gcs, VOICES_NUM_OFS+Panel->voices_num_width+4+VOICENUM_WIDTH+
+ TEMPO_WIDTH+2*TEMPO_SPACE+Panel->tempo_width+
+ PITCH_WIDTH+2*PITCH_SPACE+Panel->pitch_width,
+ trace_height_nf+titlefont_ascent, p, strlen(p));
+}
+
+static void drawMute(int ch, int mute) {
+ char s[16];
+
+ if (mute != 0) {
+ SET_CHANNELMASK(channel_mute, ch);
+ XSetForeground(disp, gct, textbgcolor);
+ }
+ else {
+ UNSET_CHANNELMASK(channel_mute, ch);
+ XSetForeground(disp, gct, textcolor);
+ }
+ if (!XAWLIMIT(ch)) return;
+ ch++;
+ /* timidity internals counts from 0. timidity ui counts from 1 */
+ sprintf(s, "%2d", ch);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_C]+2, CHANNEL_HEIGHT(ch-VISLOW)-5, s, 2);
+}
+
+/* End of privates */
+
+int handleTraceinput(char *local_buf) {
+ char c;
+ int ch, i, n;
+
+ switch (local_buf[0]) {
+ case 'R':
+ redrawTrace(True);
+ break;
+ case 'v':
+ c = *(local_buf+1);
+ n = atoi(local_buf+2);
+ if (c == 'L')
+ Panel->xaw_i_voices = n;
+ else
+ Panel->last_voice = n;
+ drawVoices();
+ break;
+ case 'M':
+ ch = *(local_buf+1) - 'A';
+ n = atoi(local_buf+2);
+ drawMute(ch, n);
+ break;
+ case 'Y':
+ {
+ int note;
+
+ ch = *(local_buf+1) - 'A';
+ c = *(local_buf+2);
+ note = (*(local_buf+3) - '0') * 100 + (*(local_buf+4) - '0') * 10 +
+ *(local_buf+5) - '0';
+ n = atoi(local_buf+6);
+ if ((c == '*') || (c == '&')) {
+ Panel->c_flags[ch] |= FLAG_PROG_ON;
+ } else {
+ Panel->c_flags[ch] &= ~FLAG_PROG_ON; n = 0;
+ }
+ ctl_channel_note(ch, note, n);
+ if (!XAWLIMIT(ch)) break;
+ draw1Note(ch, note, c);
+ draw1Chan(ch, Panel->ctotal[ch], c);
+ }
+ break;
+ case 'I':
+ ch = *(local_buf+1) - 'A';
+ strlcpy(Panel->inst_name[ch], (char *)&local_buf[2], INST_NAME_SIZE);
+ if (!XAWLIMIT(ch)) break;
+ drawInstname(ch, Panel->inst_name[ch]);
+ break;
+ case 'i':
+ ch = *(local_buf+1) - 'A';
+ Panel->is_drum[ch] = *(local_buf+2) - 'A';
+ if (!XAWLIMIT(ch)) break;
+ drawDrumPart(ch, Panel->is_drum[ch]);
+ break;
+ case 'P':
+ c = *(local_buf+1);
+ ch = *(local_buf+2)-'A';
+ n = atoi(local_buf+3);
+ switch(c) {
+ case 'A': /* panning */
+ Panel->channel[ch].panning = n;
+ Panel->c_flags[ch] |= FLAG_PAN;
+ if (!XAWLIMIT(ch)) break;
+ drawPan(ch, n, True);
+ break;
+ case 'B': /* pitch_bend */
+ Panel->channel[ch].pitchbend = n;
+ Panel->c_flags[ch] |= FLAG_BENDT;
+ if (!XAWLIMIT(ch)) break;
+ if (!plane) drawPitch(ch, n);
+ break;
+ case 'b': /* tonebank */
+ Panel->channel[ch].bank = n;
+ if (!XAWLIMIT(ch)) break;
+ if (plane) drawBank(ch, n);
+ break;
+ case 'r': /* reverb */
+ Panel->reverb[ch] = n;
+ if (!XAWLIMIT(ch)) break;
+ if (plane) drawReverb(ch, n);
+ break;
+ case 'c': /* chorus */
+ Panel->channel[ch].chorus_level = n;
+ if (!XAWLIMIT(ch)) break;
+ if (plane) drawChorus(ch, n);
+ break;
+ case 'S': /* sustain */
+ Panel->channel[ch].sustain = n;
+ Panel->c_flags[ch] |= FLAG_SUST;
+ break;
+ case 'P': /* program */
+ Panel->channel[ch].program = n;
+ Panel->c_flags[ch] |= FLAG_PROG;
+ if (!XAWLIMIT(ch)) break;
+ drawProg(ch, n, True);
+ break;
+ case 'E': /* expression */
+ Panel->channel[ch].expression = n;
+ ctl_channel_note(ch, Panel->cnote[ch], Panel->cvel[ch]);
+ if (!XAWLIMIT(ch)) break;
+ drawExp(ch, n);
+ break;
+ case 'V': /* volume */
+ Panel->channel[ch].volume = n;
+ ctl_channel_note(ch, Panel->cnote[ch], Panel->cvel[ch]);
+ if (!XAWLIMIT(ch)) break;
+ drawVol(ch, n);
+ break;
+ }
+ break;
+ case 'U': /* update timer */
+ {
+ static double last_time = 0;
+ double d, t;
+ Bool need_flush;
+ double delta_time;
+
+ t = get_current_calender_time();
+ d = t - last_time;
+ if (d > 1) d = 1;
+ delta_time = d / TRACE_UPDATE_TIME;
+ last_time = t;
+ need_flush = False;
+ for(i=0; i<MAX_TRACE_CHANNELS; i++)
+ if (Panel->v_flags[i] != 0) {
+ if (Panel->v_flags[i] == FLAG_NOTE_OFF) {
+ Panel->ctotal[i] -= DELTA_VEL * delta_time;
+ if (Panel->ctotal[i] <= 0) {
+ Panel->ctotal[i] = 0;
+ Panel->v_flags[i] = 0;
+ }
+ if (XAWLIMIT(i)) draw1Chan(i, Panel->ctotal[i], '*');
+ need_flush = True;
+ } else {
+ Panel->v_flags[i] = 0;
+ }
+ }
+ if (need_flush) XFlush(disp);
+ }
+ break;
+ case 'r': /* rhythem, tempo */
+ n = atoi(local_buf+1);
+ Panel->tempo = (int) (500000/ (double)n * 120 + 0.5);
+ drawTempo();
+ break;
+ case 'q': /* quotient, ratio */
+ Panel->timeratio = atoi(local_buf+1);
+ drawTempo();
+ break;
+ case 'o': /* pitch offset */
+ Panel->poffset = n = atoi(local_buf+2);
+ drawOverallPitch(Panel->pitch, n);
+ break;
+ case 'p': /* pitch */
+ Panel->pitch = n = atoi(local_buf+2);
+ drawOverallPitch(n, Panel->poffset);
+ break;
+ default:
+ return -1;
+ }
+ return 0;
+}
+
+void redrawTrace(Boolean draw) {
+ int i;
+ char s[3];
+
+ for(i=0; i<VISIBLE_CHANNELS; i++) {
+ XGCValues gv;
+ gv.tile = layer[plane];
+ gv.ts_x_origin = 0;
+ gv.ts_y_origin = CHANNEL_HEIGHT(i);
+ XChangeGC(disp, gc_xcopy, GCTile|GCTileStipXOrigin|GCTileStipYOrigin, &gv);
+ XFillRectangle(disp, Panel->trace, gc_xcopy,
+ 0, CHANNEL_HEIGHT(i), trace_width, BAR_SPACE);
+ }
+ XSetForeground(disp, gct, capcolor);
+ XDrawLine(disp, Panel->trace, gct, BARH_OFS0, trace_height_nf,
+ trace_width-1, trace_height_nf);
+
+ for(i=VISLOW+1; i<VISLOW+VISIBLE_CHANNELS+1; i++) {
+ if (IS_SET_CHANNELMASK(channel_mute, i-1))
+ XSetForeground(disp, gct, textbgcolor);
+ else XSetForeground(disp, gct, textcolor);
+ sprintf(s, "%2d", i);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[CL_C]+2, CHANNEL_HEIGHT(i-VISLOW)-5,
+ s, 2);
+ }
+
+ if (Panel->g_cursor_is_in) {
+ XSetForeground(disp, gct, capcolor);
+ XFillRectangle(disp, Panel->trace, gct, 0, 0, trace_width, TRACE_HEADER);
+ }
+ redrawCaption(Panel->g_cursor_is_in);
+
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp, Panel->trace, gct, 0, trace_height_nf+1,
+ trace_width, TRACE_FOOT);
+ XSetForeground(disp, gct, capcolor);
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ VOICES_NUM_OFS, trace_height_nf+tracefont_ascent, "Voices", 6);
+ drawVoices();
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ VOICES_NUM_OFS+Panel->voices_num_width+4+VOICENUM_WIDTH,
+ trace_height_nf+tracefont_ascent, "Tempo", 5);
+ drawTempo();
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ VOICES_NUM_OFS+Panel->voices_num_width+4+VOICENUM_WIDTH+
+ TEMPO_WIDTH+2*TEMPO_SPACE+Panel->tempo_width,
+ trace_height_nf+tracefont_ascent, "Key", 3);
+ drawOverallPitch(Panel->pitch, Panel->poffset);
+ drawTitle(Panel->title);
+ if (draw) {
+ for(i=VISLOW; i<VISLOW+VISIBLE_CHANNELS; i++)
+ if ((Panel->ctotal[i] != 0) && (Panel->c_flags[i] & FLAG_PROG_ON))
+ draw1Chan(i, Panel->ctotal[i], '*');
+ XSetForeground(disp, gct, pancolor);
+ for(i=VISLOW; i<VISLOW+VISIBLE_CHANNELS; i++) {
+ if (Panel->c_flags[i] & FLAG_PAN)
+ drawPan(i, Panel->channel[i].panning, False);
+ }
+ XSetForeground(disp, gct, textcolor);
+ for(i=VISLOW; i<VISLOW+VISIBLE_CHANNELS; i++) {
+ drawProg(i, Panel->channel[i].program, False);
+ drawVol(i, Panel->channel[i].volume);
+ drawExp(i, Panel->channel[i].expression);
+ if (plane) {
+ drawBank(i, Panel->channel[i].bank);
+ drawReverb(i, Panel->reverb[i]);
+ drawChorus(i, Panel->channel[i].chorus_level);
+ } else {
+ drawPitch(i, Panel->channel[i].pitchbend);
+ drawInstname(i, Panel->inst_name[i]);
+ }
+ }
+ }
+}
+
+void redrawCaption(Boolean cursor_is_in) {
+ const char *p;
+ int i;
+
+ if (cursor_is_in) {
+ XSetForeground(disp, gct, capcolor);
+ XFillRectangle(disp, Panel->trace, gct, 0, 0, trace_width, TRACE_HEADER);
+ XSetBackground(disp, gct, expcolor);
+ XSetForeground(disp, gct, tracecolor);
+ } else {
+ XSetForeground(disp, gct, tracecolor);
+ XFillRectangle(disp, Panel->trace, gct, 0, 0, trace_width, TRACE_HEADER);
+ XSetBackground(disp, gct, tracecolor);
+ XSetForeground(disp, gct, capcolor);
+ }
+ Panel->g_cursor_is_in = cursor_is_in;
+ for(i=0; i<pl[plane].col; i++) {
+ p = pl[plane].cap[i];
+ XmbDrawString(disp, Panel->trace, trace_font, gct,
+ pl[plane].ofs[i]+4, 16, p, strlen(p));
+ }
+}
+
+void initStatus(void) {
+ int i;
+
+ for(i=0; i<MAX_TRACE_CHANNELS; i++) {
+ Panel->c_flags[i] = 0;
+ Panel->channel[i].bank = 0;
+ Panel->channel[i].chorus_level = 0;
+ Panel->channel[i].expression = 0;
+ Panel->channel[i].panning = -1;
+ Panel->channel[i].pitchbend = 0;
+ Panel->channel[i].program = 0;
+ Panel->channel[i].sustain = 0;
+ Panel->channel[i].volume = 0;
+ Panel->cnote[i] = 0;
+ Panel->cvel[i] = 0;
+ Panel->ctotal[i] = 0;
+ Panel->is_drum[i] = 0;
+ *(Panel->inst_name[i]) = '\0';
+ Panel->reverb[i] = 0;
+ Panel->v_flags[i] = 0;
+ }
+ Panel->multi_part = 0;
+ Panel->pitch = 7;
+ Panel->poffset = 0;
+ Panel->tempo = 100;
+ Panel->timeratio = 100;
+ Panel->last_voice = 0;
+}
+
+void scrollTrace(int direction) {
+ if (direction > 0) {
+ if (Panel->multi_part < (MAX_TRACE_CHANNELS - 2*VISIBLE_CHANNELS))
+ Panel->multi_part += VISIBLE_CHANNELS;
+ else if (Panel->multi_part < (MAX_TRACE_CHANNELS - VISIBLE_CHANNELS))
+ Panel->multi_part = MAX_TRACE_CHANNELS - VISIBLE_CHANNELS;
+ else
+ Panel->multi_part = 0;
+ } else {
+ if (Panel->multi_part > VISIBLE_CHANNELS)
+ Panel->multi_part -= VISIBLE_CHANNELS;
+ else if (Panel->multi_part > 0)
+ Panel->multi_part = 0;
+ else
+ Panel->multi_part = MAX_TRACE_CHANNELS - VISIBLE_CHANNELS;
+ }
+ redrawTrace(True);
+}
+
+void toggleTracePlane(Boolean draw) {
+ plane ^= 1;
+ redrawTrace(draw);
+}
+
+int getLowestVisibleChan(void) {
+ return Panel->multi_part;
+}
+
+int getVisibleChanNum(void) {
+ return Panel->visible_channels;
+}
+
+void initTrace(Display *dsp, Window trace, char *title, tconfig *cfg) {
+ XGCValues gv, gcval;
+ GC gc;
+ unsigned long gcmask;
+ XFontStruct **fs_list;
+ XFontStruct *font0;
+ char **ml;
+ int i, j, k, tmpi, w, screen;
+
+ Panel = (PanelInfo *)safe_malloc(sizeof(PanelInfo));
+ Panel->trace = trace;
+ Panel->title = title;
+ Panel->cfg = cfg;
+ plane = 0;
+ Panel->g_cursor_is_in = False;
+ disp = dsp;
+ screen = DefaultScreen(disp);
+ for(i=0; i<MAX_TRACE_CHANNELS; i++) {
+ if (ISDRUMCHANNEL(i)) {
+ Panel->is_drum[i] = 1;
+ Panel->barcol[i] = cfg->drumvelocity_color;
+ } else {
+ Panel->barcol[i] = cfg->velocity_color;
+ }
+ Panel->inst_name[i] = (char *)safe_malloc(sizeof(char) * INST_NAME_SIZE);
+ }
+ initStatus();
+ Panel->xaw_i_voices = 0;
+ Panel->voices_num_width = XmbTextEscapement(trace_font,
+ "Voices", 6) + VOICES_NUM_OFS;
+ Panel->tempo_width = XmbTextEscapement(trace_font, "Tempo", 5);
+ Panel->pitch_width = XmbTextEscapement(trace_font, "Key", 3);
+ Panel->visible_channels = (cfg->trace_height - TRACE_HEADER - TRACE_FOOT) /
+ BAR_SPACE;
+ if (Panel->visible_channels > MAX_CHANNELS)
+ Panel->visible_channels = MAX_CHANNELS;
+ else if (Panel->visible_channels < 1)
+ Panel->visible_channels = 1;
+ cfg->trace_height = Panel->visible_channels * BAR_SPACE +
+ TRACE_HEADER + TRACE_FOOT;
+ /* Prevent empty space between the trace foot and the channels bars. */
+
+ gcmask = GCForeground | GCBackground | GCFont;
+ gcval.foreground = 1;
+ gcval.background = 1;
+ gcval.plane_mask = 1;
+ XFontsOfFontSet(ttitle_font, &fs_list, &ml);
+ font0 = fs_list[0];
+ if (font0->fid == 0) {
+ font0 = XLoadQueryFont(disp, ml[0]);
+ if (font0 == NULL) {
+ fprintf(stderr, "can't load fonts %s\n", ml[0]);
+ exit(1);
+ }
+ }
+ titlefont_ascent = font0->ascent + 3;
+ gcval.font = font0->fid;
+ gcs = XCreateGC(disp, RootWindow(disp, screen), gcmask, &gcval);
+
+ gv.fill_style = FillTiled;
+ gv.fill_rule = WindingRule;
+ gc_xcopy = XCreateGC(disp, RootWindow(disp, screen),
+ GCFillStyle | GCFillRule, &gv);
+ gct = XCreateGC(disp, RootWindow(disp, screen), 0, NULL);
+ gc = XCreateGC(disp, RootWindow(disp, screen), 0, NULL);
+
+ XFontsOfFontSet(trace_font, &fs_list, &ml);
+ font0 = fs_list[0];
+ if (font0->fid == 0) {
+ font0 = XLoadQueryFont(disp, ml[0]);
+ if (font0 == NULL) {
+ fprintf(stderr, "can't load fonts %s\n", ml[0]);
+ exit(1);
+ }
+ }
+ tracefont_ascent = font0->ascent + 3;
+ if (tracefont_ascent > titlefont_ascent)
+ tracefont_ascent = titlefont_ascent;
+ else
+ titlefont_ascent = tracefont_ascent;
+ XSetFont(disp, gct, font0->fid);
+
+ keyG = (ThreeL *)safe_malloc(sizeof(ThreeL) * KEY_NUM);
+ for(i=0, j=BARH_OFS8+1; i<KEY_NUM; i++) {
+ tmpi = i%12;
+ switch (tmpi) {
+ case 0:
+ case 5:
+ case 10:
+ keyG[i].k[0].y = 11; keyG[i].k[0].l = 7;
+ keyG[i].k[1].y = 2; keyG[i].k[1].l = 16;
+ keyG[i].k[2].y = 11; keyG[i].k[2].l = 7;
+ keyG[i].col = white;
+ break;
+ case 2:
+ case 7:
+ keyG[i].k[0].y = 11; keyG[i].k[0].l = 7;
+ keyG[i].k[1].y = 2; keyG[i].k[1].l = 16;
+ keyG[i].k[2].y = 2; keyG[i].k[2].l = 16;
+ keyG[i].col = white;
+ break;
+ case 3:
+ case 8:
+ j += 2;
+ keyG[i].k[0].y = 2; keyG[i].k[0].l = 16;
+ keyG[i].k[1].y = 2; keyG[i].k[1].l = 16;
+ keyG[i].k[2].y = 11; keyG[i].k[2].l = 7;
+ keyG[i].col = white;
+ break;
+ default: /* black key */
+ keyG[i].k[0].y = 2; keyG[i].k[0].l = 8;
+ keyG[i].k[1].y = 2; keyG[i].k[1].l = 8;
+ keyG[i].k[2].y = 2; keyG[i].k[2].l = 8;
+ keyG[i].col = black;
+ break;
+ }
+ keyG[i].xofs = j; j += 2;
+ }
+
+ /* draw on template pixmaps that includes one channel row */
+ for(i=0; i<2; i++) {
+ layer[i] = XCreatePixmap(disp, Panel->trace, trace_width, BAR_SPACE,
+ DefaultDepth(disp, screen));
+ drawKeyboardAll(layer[i], gc);
+ XSetForeground(disp, gc, capcolor);
+ XDrawLine(disp, layer[i], gc, 0, 0, trace_width, 0);
+ XDrawLine(disp, layer[i], gc, 0, 0, 0, BAR_SPACE);
+ XDrawLine(disp, layer[i], gc, trace_width-1, 0, trace_width-1, BAR_SPACE);
+
+ for(j=0; j < pl[i].col-1; j++) {
+ tmpi = TRACEH_OFS; w = pl[i].w[j];
+ for(k=0; k<j; k++) tmpi += pl[i].w[k];
+ tmpi = pl[i].ofs[j];
+ XSetForeground(disp, gc, capcolor);
+ XDrawLine(disp, layer[i], gc, tmpi+w, 0, tmpi+w, BAR_SPACE);
+ XSetForeground(disp, gc, rimcolor);
+ XDrawLine(disp, layer[i], gc, tmpi+w-2, 2, tmpi+w-2, BAR_HEIGHT+1);
+ XDrawLine(disp, layer[i], gc, tmpi+2, BAR_HEIGHT+2, tmpi+w-2,
+ BAR_HEIGHT+2);
+ XSetForeground(disp, gc, j?boxcolor:textbgcolor);
+ XFillRectangle(disp, layer[i], gc, tmpi+2, 2, w-4, BAR_HEIGHT);
+ }
+ }
+ XFreeGC(disp, gc);
+}
+
+void uninitTrace(void) {
+ int i;
+
+ free(Panel); free(keyG);
+ XFreePixmap(disp, layer[0]); XFreePixmap(disp, layer[1]);
+ for (i=0; i<T2COLUMN; i++) {
+ XFreePixmap(disp, gradient_pixmap[i]);
+ XFreeGC(disp, gradient_gc[i]);
+ }
+ XFreeGC(disp, gcs); XFreeGC(disp, gct); XFreeGC(disp, gc_xcopy);
+}
--- /dev/null
+/*
+ TiMidity++ -- MIDI to WAVE converter and player
+ Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
+ Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+
+ x_trace.h:
+ based on code by Yoshishige Arai (ryo2@on.rim.or.jp)
+ modified by Yair Kalvariski <cesium2@gmail.com>
+*/
+
+#ifndef _X_TRACE_H
+#define _X_TRACE_H
+
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include "timidity.h"
+#include "common.h"
+#include "instrum.h"
+#include "playmidi.h"
+
+#define MAX_TRACE_CHANNELS MAX_CHANNELS
+#if MAX_TRACE_CHANNELS > 16
+#define D_VISIBLE_CHANNELS 16
+#else
+#define D_VISIBLE_CHANNELS MAX_TRACE_CHANNELS
+#endif /* MAX_TRACE_CHANNELS > 16 */
+
+#define TRACE_UPDATE_TIME 0.1
+#define DELTA_VEL 32
+
+#define TRACE_WIDTH 627 /* default height of trace_vport */
+#define TRACE_HEADER 22
+#define TRACE_FOOT 20
+#define TRACEH_OFS 0
+#define BAR_SPACE 20
+#define BAR_HEIGHT 16
+#define DISP_INST_NAME_LEN 13
+#define INST_NAME_SIZE 16
+
+#define CHANNEL_HEIGHT(ch) BAR_SPACE*(ch)+TRACE_HEADER
+#define TRACE_HEIGHT CHANNEL_HEIGHT(D_VISIBLE_CHANNELS)
+#define TRACE_HEIGHT_WITH_FOOTER (TRACE_HEIGHT+TRACE_FOOT)
+
+typedef struct {
+ int Red_depth, Green_depth, Blue_depth;
+ int Red_sft, Green_sft, Blue_sft;
+} RGBInfo;
+
+typedef struct _tconfig {
+ Boolean gradient_bar;
+ Dimension trace_width, trace_height;
+ XFontSet trace_font, ttitle_font;
+ Pixel common_fgcolor, text_bgcolor,
+ velocity_color, drumvelocity_color, volume_color, expr_color, pan_color,
+ trace_bgcolor, rim_color, box_color, caption_color, sus_color,
+ white_key_color, black_key_color, play_color, rev_color, cho_color;
+ String untitled;
+} tconfig;
+
+extern int getLowestVisibleChan(void);
+extern int getVisibleChanNum(void);
+extern int handleTraceinput(char *);
+extern void initStatus(void);
+extern void initTrace(Display *, Window, char *, tconfig *);
+extern void redrawCaption(Boolean);
+extern void redrawTrace(Boolean);
+extern void scrollTrace(int);
+extern void toggleTracePlane(Boolean draw);
+extern void uninitTrace(void);
+
+#endif /* _X_TRACE_I_H */
--- /dev/null
+/*
+ * Copyright (C) 2000-2004 the xine project
+ *
+ * This file is part of xine, a unix video player.
+ *
+ * xine is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * xine is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ * $Id$
+ *
+ *
+ * Thanks to Paul Sheer for his nice xdnd implementation in cooledit.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xatom.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h> /* NetBSD needs this */
+#endif
+#include "common.h"
+#include "xdnd.h"
+
+#define XDND_VERSION 3
+
+/* #undef DEBUG_DND */
+
+/*
+ * PRIVATES
+ */
+
+static int _is_atom_match(DndClass *xdnd, Atom **atom) {
+ int i, j;
+
+ for(i = 0; (*atom)[i] != 0; i++) {
+ for(j = 0; j <= MAX_SUPPORTED_TYPE; j++) {
+ if((*atom)[i] == xdnd->supported[j])
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+/*
+ * Send XdndFinished to 'window' from target 'from'
+ */
+static void _dnd_send_finished (DndClass *xdnd, Window window, Window from) {
+ XEvent xevent;
+
+ if((xdnd == NULL) || (window == None) || (from == None))
+ return;
+
+ memset(&xevent, 0, sizeof(xevent));
+ xevent.xany.type = ClientMessage;
+ xevent.xany.display = xdnd->display;
+ xevent.xclient.window = window;
+ xevent.xclient.message_type = xdnd->_XA_XdndFinished;
+ xevent.xclient.format = 32;
+ XDND_FINISHED_TARGET_WIN(&xevent) = from;
+
+ XLockDisplay(xdnd->display);
+ XSendEvent(xdnd->display, window, 0, 0, &xevent);
+ XUnlockDisplay(xdnd->display);
+ xdnd->in_progress = False;
+}
+
+static void unescape_string(char *src, char *dest) {
+ char *s, *d;
+
+ if((src == NULL) || (dest == NULL)) {
+ fprintf(stderr, "unescape got NULL argument(s)\n");
+ return;
+ }
+
+ if(!strlen(src))
+ return;
+
+ memset(dest, 0, sizeof(dest));
+ s = src;
+ d = dest;
+
+ while(*s != '\0') {
+
+ switch(*s) {
+ case '%':
+ if ((*(s) == '%') && (*(s + 1) != '%')) {
+ char buffer[5] = { '0', 'x', *(s + 1) , *(s + 2), '\0' };
+ char *p = buffer;
+ int character = strtol(p, &p, 16);
+
+ *d = character;
+ s += 2;
+ }
+ else {
+ *d++ = '%';
+ *d = '%';
+ }
+ break;
+
+ default:
+ *d = *s;
+ break;
+ }
+ s++;
+ d++;
+ }
+ *d = '\0';
+}
+
+/*
+ * WARNING: X unlocked function
+ */
+static int _dnd_paste_prop_internal(DndClass *xdnd, Window from,
+ Window insert, Atom prop, Boolean delete_prop) {
+ long nread;
+ unsigned long nitems;
+ unsigned long bytes_after;
+
+ nread = 0;
+
+ do {
+ Atom actual_type;
+ int actual_fmt;
+ unsigned char *s = NULL;
+
+ if (XGetWindowProperty(xdnd->display, insert, prop,
+ nread / (sizeof(unsigned char *)), 65536,
+ delete_prop, AnyPropertyType,
+ &actual_type, &actual_fmt, &nitems, &bytes_after,
+ &s) != Success)
+ {
+ if (s) XFree(s);
+ return 1;
+ }
+
+ nread += nitems;
+ if (!nread) {
+ XFree(s);
+ return 1;
+ }
+
+ /* Okay, got something, handle */
+ if (*s != '\0') {
+ /*
+ * from manpage:
+ * XGetWindowProperty always allocates one extra byte in prop_return
+ * (even if the property is zero length) and sets it to zero so that
+ * simple properties consisting of characters do not have to be copied
+ * into yet another string before use.
+ */
+ char *p;
+ int plen;
+
+ /* Extract all data, '\n' separated */
+ p = strtok((char *)s, "\n");
+ while (p != NULL) {
+
+ plen = strlen(p) - 1;
+
+ /* Cleanup end of string */
+ while ((plen >= 0) && ((p[plen] == 10) || (p[plen] == 12) ||
+ (p[plen] == 13)))
+ p[plen--] = '\0';
+
+ if (plen) {
+ char *obuf;
+ if (!strncmp(p, "file:", 5)) {
+ obuf = (char *)safe_malloc(2*plen + 1);
+ unescape_string(p, obuf);
+ }
+ else obuf = p;
+
+#ifdef DEBUG_DND
+ printf("GOT '%s'\n", obuf);
+#endif
+
+ if (xdnd->callback) xdnd->callback(obuf);
+ if (obuf != p) {
+ free(obuf);
+ obuf = NULL;
+ }
+ }
+ p = strtok(NULL, "\n");
+ }
+ }
+
+ XFree(s);
+ } while(bytes_after);
+
+ return 0;
+}
+
+/*
+ * Getting selections, using INCR if possible.
+ */
+static void _dnd_get_selection (DndClass *xdnd, Window from, Atom prop,
+ Window insert) {
+ struct timeval tv, tv_start;
+ long nread;
+ unsigned long bytes_after;
+ Atom actual_type;
+ int actual_fmt;
+ unsigned long nitems;
+ unsigned char *s = NULL;
+
+ if((xdnd == NULL) || (prop == None))
+ return;
+
+ nread = 0;
+
+ XLockDisplay(xdnd->display);
+ if(XGetWindowProperty(xdnd->display, insert, prop, 0, 8, False, AnyPropertyType,
+ &actual_type, &actual_fmt, &nitems, &bytes_after, &s) != Success) {
+ XFree(s);
+ XUnlockDisplay(xdnd->display);
+ return;
+ }
+
+ XFree(s);
+
+ if(actual_type != xdnd->_XA_INCR) {
+ (void) _dnd_paste_prop_internal(xdnd, from, insert, prop, True);
+ XUnlockDisplay(xdnd->display);
+ return;
+ }
+
+ XDeleteProperty(xdnd->display, insert, prop);
+ gettimeofday(&tv_start, 0);
+
+ for(;;) {
+ long t;
+ fd_set r;
+ XEvent xe;
+
+ if(XCheckMaskEvent(xdnd->display, PropertyChangeMask, &xe)) {
+ if((xe.type == PropertyNotify) && (xe.xproperty.state == PropertyNewValue)) {
+
+ /* time between arrivals of data */
+ gettimeofday (&tv_start, 0);
+
+ if(_dnd_paste_prop_internal(xdnd, from, insert, prop, True))
+ break;
+ }
+ } else {
+ tv.tv_sec = 0;
+ tv.tv_usec = 10000;
+ FD_ZERO(&r);
+ FD_SET(ConnectionNumber(xdnd->display), &r);
+ select(ConnectionNumber(xdnd->display) + 1, &r, 0, 0, &tv);
+
+ if(FD_ISSET(ConnectionNumber(xdnd->display), &r))
+ continue;
+ }
+ gettimeofday(&tv, 0);
+ t = (tv.tv_sec - tv_start.tv_sec) * 1000000L + (tv.tv_usec - tv_start.tv_usec);
+
+ /* No data for five seconds, so quit */
+ if(t > 5000000L) {
+ XUnlockDisplay(xdnd->display);
+ return;
+ }
+ }
+
+ XUnlockDisplay(xdnd->display);
+}
+
+/*
+ * Get list of type from window (more than 3).
+ */
+static void _dnd_get_type_list (DndClass *xdnd, Window window, Atom **typelist) {
+ Atom type, *a;
+ int format;
+ unsigned long count, remaining, i;
+ unsigned char *data = NULL;
+
+ *typelist = NULL;
+
+ if((xdnd == NULL) || (window == None))
+ return;
+
+ XLockDisplay(xdnd->display);
+ XGetWindowProperty(xdnd->display, window, xdnd->_XA_XdndTypeList, 0, 0x8000000L,
+ False, XA_ATOM, &type, &format, &count, &remaining, &data);
+
+ XUnlockDisplay(xdnd->display);
+
+ if((type != XA_ATOM) || (format != 32) || (count == 0) || (!data)) {
+
+ if(data) {
+ XLockDisplay(xdnd->display);
+ XFree(data);
+ XUnlockDisplay(xdnd->display);
+ }
+
+ fprintf(stderr, "xdnd.c@%d: XGetWindowProperty failed in "
+ "xdnd_get_type_list - dnd->_XA_XdndTypeList = %ld\n",
+ __LINE__, xdnd->_XA_XdndTypeList);
+ return;
+ }
+
+ *typelist = (Atom *)safe_malloc((count + 1) * sizeof(Atom));
+ a = (Atom *) data;
+
+ for(i = 0; i < count; i++)
+ (*typelist)[i] = a[i];
+
+ (*typelist)[count] = 0;
+
+ XLockDisplay(xdnd->display);
+ XFree(data);
+ XUnlockDisplay(xdnd->display);
+}
+
+/*
+ * Get list of type from window (3).
+ */
+static void _dnd_get_three_types (XEvent * xevent, Atom **typelist) {
+ int i;
+
+ *typelist = (Atom *)safe_malloc((XDND_THREE + 1) * sizeof(Atom) );
+
+ for(i = 0; i < XDND_THREE; i++)
+ (*typelist)[i] = XDND_ENTER_TYPE(xevent, i);
+ /* although (*typelist)[1] or (*typelist)[2] may also be set to nill */
+ (*typelist)[XDND_THREE] = 0;
+}
+
+/*
+ * END OF PRIVATES
+ */
+
+/*
+ * Initialize Atoms, ...
+ */
+void init_dnd(Display *display, DndClass *xdnd) {
+char *prop_names[_XA_ATOMS_COUNT] = {
+ "XdndAware", /* _XA_XdndAware */
+ "XdndEnter", /* _XA_XdndEnter */
+ "XdndLeave", /* _XA_XdndLeave */
+ "XdndDrop", /* _XA_XdndDrop */
+ "XdndPosition", /* _XA_XdndPosition */
+ "XdndStatus", /* _XA_XdndStatus */
+ "XdndSelection", /* _XA_XdndSelection */
+ "XdndFinished", /* _XA_XdndFinished */
+ "XdndTypeList", /* _XA_XdndTypeList */
+ "INCR", /* _XA_INCR */
+ "WM_DELETE_WINDOW", /* _XA_WM_DELETE_WINDOW */
+ "TiMidityXSelWindowProperty" /* TIMIDITY_PROTOCOL_ATOM */
+};
+
+char *mime_names[MAX_SUPPORTED_TYPE] = {
+ "text/uri-list", /* supported[0] */
+ "text/plain" /* supported[1] */
+};
+
+
+ XLockDisplay(display);
+
+ XInternAtoms(display, prop_names, _XA_ATOMS_COUNT, False, xdnd->Atoms);
+ XInternAtoms(display, mime_names, MAX_SUPPORTED_TYPE, False, xdnd->supported);
+
+ XUnlockDisplay(display);
+
+ xdnd->display = display;
+ xdnd->version = XDND_VERSION;
+ xdnd->callback = NULL;
+ xdnd->dragger_typelist = NULL;
+ xdnd->desired = 0;
+ xdnd->in_progress = False;
+}
+
+/*
+ * Add/Replace the XdndAware property of given window.
+ */
+int make_window_dnd_aware(DndClass *xdnd, Window window,
+ dnd_callback_t cb) {
+ Status status;
+ /* Because we don't install an alternate error handler,
+ * we'll never get the error messages.
+ */
+
+ if(!xdnd->display)
+ return 0;
+
+ XLockDisplay(xdnd->display);
+ status = XChangeProperty(xdnd->display, window, xdnd->_XA_XdndAware, XA_ATOM,
+ 32, PropModeReplace, (unsigned char *)&xdnd->version, 1);
+ XUnlockDisplay(xdnd->display);
+
+ if((status == BadAlloc) || (status == BadAtom) ||
+ (status == BadMatch) || (status == BadValue) || (status == BadWindow)) {
+ fprintf(stderr, "XChangeProperty() failed.\n");
+ return 0;
+ }
+
+ XLockDisplay(xdnd->display);
+ XChangeProperty(xdnd->display, window, xdnd->_XA_XdndTypeList, XA_ATOM, 32,
+ PropModeAppend, (unsigned char *)&xdnd->supported, 1);
+ XUnlockDisplay(xdnd->display);
+
+ if((status == BadAlloc) || (status == BadAtom) ||
+ (status == BadMatch) || (status == BadValue) || (status == BadWindow)) {
+ fprintf(stderr, "XChangeProperty() failed.\n");
+ return 0;
+ }
+
+ xdnd->callback = cb;
+ xdnd->win = window; /* xdnd_listener will overwrite this */
+
+ return 1;
+}
+
+/*
+ * Handle ClientMessage/SelectionNotify events.
+ */
+int process_client_dnd_message(DndClass *xdnd, XEvent *event) {
+ int retval = 0;
+
+ if((xdnd == NULL) || (event == NULL))
+ return 0;
+
+ if(event->type == ClientMessage) {
+
+ if((xdnd->in_progress == True) && (event->xclient.format == 32) &&
+ (XDND_ENTER_SOURCE_WIN(event) == xdnd->_XA_WM_DELETE_WINDOW)) {
+ XEvent xevent;
+
+#ifdef DEBUG_DND
+ printf("ClientMessage KILL\n");
+#endif
+
+ memset(&xevent, 0, sizeof(xevent));
+ xevent.xany.type = DestroyNotify;
+ xevent.xany.display = xdnd->display;
+ xevent.xdestroywindow.type = DestroyNotify;
+ xevent.xdestroywindow.send_event = True;
+ xevent.xdestroywindow.display = xdnd->display;
+ xevent.xdestroywindow.event = xdnd->win;
+ xevent.xdestroywindow.window = xdnd->win;
+
+ XLockDisplay(xdnd->display);
+ XSendEvent(xdnd->display, xdnd->win, True, 0L, &xevent);
+ XUnlockDisplay(xdnd->display);
+
+ retval = 1;
+ }
+ else if(event->xclient.message_type == xdnd->_XA_XdndEnter) {
+
+#ifdef DEBUG_DND
+ printf("XdndEnter\n");
+#endif
+
+ if((XDND_ENTER_VERSION(event) < 3) ||
+ (xdnd->in_progress == True)) {
+ return 0;
+ }
+ else xdnd->in_progress = True;
+
+ xdnd->dragger_window = XDND_ENTER_SOURCE_WIN(event);
+ xdnd->dropper_toplevel = event->xany.window;
+ xdnd->dropper_window = None;
+
+ free(xdnd->dragger_typelist);
+ xdnd->dragger_typelist = NULL;
+
+ if(XDND_ENTER_THREE_TYPES(event)) {
+#ifdef DEBUG_DND
+ printf("Three types only\n");
+#endif
+ _dnd_get_three_types(event, &xdnd->dragger_typelist);
+ }
+ else {
+#ifdef DEBUG_DND
+ printf("More than three types - getting list\n");
+#endif
+ _dnd_get_type_list(xdnd, xdnd->dragger_window, &xdnd->dragger_typelist);
+ }
+
+ if(xdnd->dragger_typelist) {
+ int atom_match;
+#ifdef DEBUG_DND
+ {
+ int i;
+ for(i = 0; xdnd->dragger_typelist[i] != 0; i++) {
+ XLockDisplay(xdnd->display);
+ printf("%d: '%s' ", i, XGetAtomName(xdnd->display, xdnd->dragger_typelist[i]));
+ XUnlockDisplay(xdnd->display);
+ printf("\n");
+ }
+ }
+#endif
+
+ if((atom_match = _is_atom_match(xdnd, &xdnd->dragger_typelist)) >= 0) {
+ xdnd->desired = xdnd->dragger_typelist[atom_match];
+ }
+
+ }
+ else {
+ fprintf(stderr,
+ "xdnd.c@%d: xdnd->dragger_typelist is zero length!\n", __LINE__);
+ /* Probably doesn't work */
+ if ((event->xclient.data.l[1] & 1) == 0) {
+ xdnd->desired = (Atom) event->xclient.data.l[1];
+ }
+ }
+ retval = 1;
+ }
+ else if(event->xclient.message_type == xdnd->_XA_XdndLeave) {
+#ifdef DEBUG_DND
+ printf("XdndLeave\n");
+#endif
+
+ if((event->xany.window == xdnd->dropper_toplevel) && (xdnd->dropper_window != None))
+ event->xany.window = xdnd->dropper_window;
+
+ if(xdnd->dragger_window == XDND_LEAVE_SOURCE_WIN(event)) {
+ free(xdnd->dragger_typelist);
+ xdnd->dragger_typelist = NULL;
+ xdnd->dropper_toplevel = xdnd->dropper_window = None;
+ xdnd->desired = 0;
+ xdnd->in_progress = False;
+ }
+
+ retval = 1;
+ }
+ else if(event->xclient.message_type == xdnd->_XA_XdndDrop) {
+ Window win;
+
+#ifdef DEBUG_DND
+ printf("XdndDrop\n");
+#endif
+ if((xdnd->dragger_window == XDND_DROP_SOURCE_WIN(event))) {
+
+ if(xdnd->desired != 0) {
+
+ if((event->xany.window == xdnd->dropper_toplevel) && (xdnd->dropper_window != None))
+ event->xany.window = xdnd->dropper_window;
+
+ xdnd->time = XDND_DROP_TIME (event);
+
+ XLockDisplay(xdnd->display);
+ if(!(win = XGetSelectionOwner(xdnd->display,
+ xdnd->_XA_XdndSelection)))
+ {
+ fprintf(stderr,
+ "xdnd.c@%d: XGetSelectionOwner() failed.\n", __LINE__);
+ XUnlockDisplay(xdnd->display);
+ return 0;
+ }
+
+ XConvertSelection(xdnd->display, xdnd->_XA_XdndSelection,
+ xdnd->desired, xdnd->TIMIDITY_PROTOCOL_ATOM,
+ xdnd->dropper_toplevel, xdnd->time);
+ XUnlockDisplay (xdnd->display);
+ }
+
+ _dnd_send_finished(xdnd, xdnd->dragger_window,
+ xdnd->dropper_toplevel);
+ }
+
+ retval = 1;
+ }
+ else if(event->xclient.message_type == xdnd->_XA_XdndPosition) {
+ XEvent xevent;
+ Window parent, child, toplevel, new_child;
+
+#ifdef DEBUG_DND
+ printf("XdndPosition\n");
+#endif
+
+ XLockDisplay(xdnd->display);
+
+ toplevel = event->xany.window;
+ parent = DefaultRootWindow(xdnd->display);
+ child = xdnd->dropper_toplevel;
+
+ for(;;) {
+ int xd, yd;
+
+ new_child = None;
+ if(!XTranslateCoordinates (xdnd->display, parent, child,
+ XDND_POSITION_ROOT_X(event), XDND_POSITION_ROOT_Y(event),
+ &xd, &yd, &new_child))
+ break;
+
+ if(new_child == None)
+ break;
+
+ child = new_child;
+ }
+
+ XUnlockDisplay(xdnd->display);
+
+ xdnd->dropper_window = event->xany.window = child;
+
+ xdnd->x = XDND_POSITION_ROOT_X(event);
+ xdnd->y = XDND_POSITION_ROOT_Y(event);
+ xdnd->time = XDND_POSITION_TIME(event);
+
+ memset (&xevent, 0, sizeof(xevent));
+ xevent.xany.type = ClientMessage;
+ xevent.xany.display = xdnd->display;
+ xevent.xclient.window = xdnd->dragger_window;
+ xevent.xclient.message_type = xdnd->_XA_XdndStatus;
+ xevent.xclient.format = 32;
+
+ XDND_STATUS_TARGET_WIN(&xevent) = xdnd->dropper_toplevel;
+ XDND_STATUS_WILL_ACCEPT_SET(&xevent, True);
+ XDND_STATUS_WANT_POSITION_SET(&xevent, True);
+ XDND_STATUS_RECT_SET(&xevent, xdnd->x, xdnd->y, 1, 1);
+ XDND_STATUS_ACTION(&xevent) = XDND_POSITION_ACTION(event);
+
+ XLockDisplay(xdnd->display);
+ XSendEvent(xdnd->display, xdnd->dragger_window, 0, 0, &xevent);
+ XUnlockDisplay(xdnd->display);
+ }
+
+ retval = 1;
+ }
+ else if(event->type == SelectionNotify) {
+
+#ifdef DEBUG_DND
+ printf("SelectionNotify\n");
+#endif
+
+ if(event->xselection.property == xdnd->TIMIDITY_PROTOCOL_ATOM) {
+ _dnd_get_selection(xdnd, xdnd->dragger_window,
+ event->xselection.property, event->xany.window);
+ _dnd_send_finished(xdnd, xdnd->dragger_window, xdnd->dropper_toplevel);
+ }
+
+ free(xdnd->dragger_typelist);
+ xdnd->dragger_typelist = NULL;
+
+ retval = 1;
+ }
+
+ return retval;
+}
--- /dev/null
+/*
+ * Copyright (C) 2000-2004 the xine project
+ *
+ * This file is part of xine, a unix video player.
+ *
+ * xine is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * xine is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ *
+ * $Id$
+ *
+ */
+
+#ifndef _HAVE_DND_H
+#define _HAVE_DND_H
+
+#include <X11/IntrinsicP.h>
+
+#define _XA_XdndAware Atoms[0]
+#define _XA_XdndEnter Atoms[1]
+#define _XA_XdndLeave Atoms[2]
+#define _XA_XdndDrop Atoms[3]
+#define _XA_XdndPosition Atoms[4]
+#define _XA_XdndStatus Atoms[5]
+#define _XA_XdndSelection Atoms[6]
+#define _XA_XdndFinished Atoms[7]
+#define _XA_XdndTypeList Atoms[8]
+#define _XA_INCR Atoms[9]
+#define _XA_WM_DELETE_WINDOW Atoms[10]
+#define TIMIDITY_PROTOCOL_ATOM Atoms[11]
+#define _XA_ATOMS_COUNT 12
+
+#define MAX_SUPPORTED_TYPE 2
+
+typedef void (*dnd_callback_t) (char *);
+
+typedef struct {
+ Display *display;
+ Window win;
+
+ dnd_callback_t callback;
+
+ int x;
+ int y;
+ Window dropper_toplevel;
+ Window dropper_window;
+ Window dragger_window;
+ Atom *dragger_typelist;
+ Atom desired;
+ Time time;
+
+ Atom Atoms[_XA_ATOMS_COUNT];
+ Atom supported[MAX_SUPPORTED_TYPE];
+ Atom version;
+ Boolean in_progress;
+} DndClass;
+
+/* header was ripped from xdnd's example on its page */
+
+#define XDND_THREE 3
+#define XDND_ENTER_SOURCE_WIN(e) ((e)->xclient.data.l[0])
+#define XDND_ENTER_THREE_TYPES(e) (((e)->xclient.data.l[1] & 0x1UL) == 0)
+#define XDND_ENTER_THREE_TYPES_SET(e,b) (e)->xclient.data.l[1] = ((e)->xclient.data.l[1] & ~0x1UL) | (((b) == 0) ? 0 : 0x1UL)
+#define XDND_ENTER_VERSION(e) ((e)->xclient.data.l[1] >> 24)
+#define XDND_ENTER_VERSION_SET(e,v) (e)->xclient.data.l[1] = ((e)->xclient.data.l[1] & ~(0xFF << 24)) | ((v) << 24)
+#define XDND_ENTER_TYPE(e,i) ((e)->xclient.data.l[2 + i]) /* i => (0, 1, 2) */
+
+/* XdndPosition */
+#define XDND_POSITION_SOURCE_WIN(e) ((e)->xclient.data.l[0])
+#define XDND_POSITION_ROOT_X(e) ((e)->xclient.data.l[2] >> 16)
+#define XDND_POSITION_ROOT_Y(e) ((e)->xclient.data.l[2] & 0xFFFFUL)
+#define XDND_POSITION_ROOT_SET(e,x,y) (e)->xclient.data.l[2] = ((x) << 16) | ((y) & 0xFFFFUL)
+#define XDND_POSITION_TIME(e) ((e)->xclient.data.l[3])
+#define XDND_POSITION_ACTION(e) ((e)->xclient.data.l[4])
+
+/* XdndStatus */
+#define XDND_STATUS_TARGET_WIN(e) ((e)->xclient.data.l[0])
+#define XDND_STATUS_WILL_ACCEPT(e) ((e)->xclient.data.l[1] & 0x1L)
+#define XDND_STATUS_WILL_ACCEPT_SET(e,b) (e)->xclient.data.l[1] = ((e)->xclient.data.l[1] & ~0x1UL) | (((b) == 0) ? 0 : 0x1UL)
+#define XDND_STATUS_WANT_POSITION(e) ((e)->xclient.data.l[1] & 0x2UL)
+#define XDND_STATUS_WANT_POSITION_SET(e,b) (e)->xclient.data.l[1] = ((e)->xclient.data.l[1] & ~0x2UL) | (((b) == 0) ? 0 : 0x2UL)
+#define XDND_STATUS_RECT_X(e) ((e)->xclient.data.l[2] >> 16)
+#define XDND_STATUS_RECT_Y(e) ((e)->xclient.data.l[2] & 0xFFFFL)
+#define XDND_STATUS_RECT_WIDTH(e) ((e)->xclient.data.l[3] >> 16)
+#define XDND_STATUS_RECT_HEIGHT(e) ((e)->xclient.data.l[3] & 0xFFFFL)
+#define XDND_STATUS_RECT_SET(e,x,y,w,h) {(e)->xclient.data.l[2] = ((x) << 16) | ((y) & 0xFFFFUL); (e)->xclient.data.l[3] = ((w) << 16) | ((h) & 0xFFFFUL); }
+#define XDND_STATUS_ACTION(e) ((e)->xclient.data.l[4])
+
+/* XdndLeave */
+#define XDND_LEAVE_SOURCE_WIN(e) ((e)->xclient.data.l[0])
+
+/* XdndDrop */
+#define XDND_DROP_SOURCE_WIN(e) ((e)->xclient.data.l[0])
+#define XDND_DROP_TIME(e) ((e)->xclient.data.l[2])
+
+/* XdndFinished */
+#define XDND_FINISHED_TARGET_WIN(e) ((e)->xclient.data.l[0])
+
+/*
+ * *** DND
+ */
+void init_dnd(Display *, DndClass *);
+
+int make_window_dnd_aware(DndClass *, Window, dnd_callback_t);
+
+int process_client_dnd_message(DndClass *, XEvent *);
+
+#endif