OSDN Git Service

Modified Files:
authorKeishi Suenaga <s_keishi@mutt.freemail.ne.jp>
Tue, 1 Apr 2008 18:57:32 +0000 (18:57 +0000)
committerKeishi Suenaga <s_keishi@mutt.freemail.ne.jp>
Tue, 1 Apr 2008 18:57:32 +0000 (18:57 +0000)
   ChangeLog
Added Files:
   TiMidity-uj.ad TiMidity.ad interface/x_trace.c
   interface/x_trace.h interface/xdnd.c interface/xdnd.h
   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
Removed Files:
   TiMidity-uj.ad.in TiMidity.ad.in

17 files changed:
ChangeLog
TiMidity-uj.ad [new file with mode: 0644]
TiMidity-uj.ad.in [deleted file]
TiMidity.ad [new file with mode: 0644]
TiMidity.ad.in [deleted file]
interface/bitmaps/arrow.xbm [new file with mode: 0644]
interface/bitmaps/check.xbm [new file with mode: 0644]
interface/bitmaps/fast.xbm [new file with mode: 0644]
interface/bitmaps/keydown.xbm [new file with mode: 0644]
interface/bitmaps/keyup.xbm [new file with mode: 0644]
interface/bitmaps/off.xbm [new file with mode: 0644]
interface/bitmaps/on.xbm [new file with mode: 0644]
interface/bitmaps/slow.xbm [new file with mode: 0644]
interface/x_trace.c [new file with mode: 0644]
interface/x_trace.h [new file with mode: 0644]
interface/xdnd.c [new file with mode: 0644]
interface/xdnd.h [new file with mode: 0644]

index 894bb38..cc0e8c1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,18 +1,18 @@
-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
diff --git a/TiMidity-uj.ad b/TiMidity-uj.ad
new file mode 100644 (file)
index 0000000..3cfb607
--- /dev/null
@@ -0,0 +1,418 @@
+! 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-*-*-*-*-*-*-*,*
diff --git a/TiMidity-uj.ad.in b/TiMidity-uj.ad.in
deleted file mode 100644 (file)
index 343405c..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-! 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-*-*-*-*-*-*-*
diff --git a/TiMidity.ad b/TiMidity.ad
new file mode 100644 (file)
index 0000000..682dfab
--- /dev/null
@@ -0,0 +1,433 @@
+! 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-*-*-*-*-*-*-*,*
diff --git a/TiMidity.ad.in b/TiMidity.ad.in
deleted file mode 100644 (file)
index e7fad7f..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-! 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-*-*-*-*-*-*-*
diff --git a/interface/bitmaps/arrow.xbm b/interface/bitmaps/arrow.xbm
new file mode 100644 (file)
index 0000000..5d0e127
--- /dev/null
@@ -0,0 +1,8 @@
+#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, };
diff --git a/interface/bitmaps/check.xbm b/interface/bitmaps/check.xbm
new file mode 100644 (file)
index 0000000..f72ae08
--- /dev/null
@@ -0,0 +1,5 @@
+#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};
diff --git a/interface/bitmaps/fast.xbm b/interface/bitmaps/fast.xbm
new file mode 100644 (file)
index 0000000..f3293d4
--- /dev/null
@@ -0,0 +1,14 @@
+#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};
diff --git a/interface/bitmaps/keydown.xbm b/interface/bitmaps/keydown.xbm
new file mode 100644 (file)
index 0000000..e419caa
--- /dev/null
@@ -0,0 +1,14 @@
+#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};
diff --git a/interface/bitmaps/keyup.xbm b/interface/bitmaps/keyup.xbm
new file mode 100644 (file)
index 0000000..c823f8e
--- /dev/null
@@ -0,0 +1,14 @@
+#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};
diff --git a/interface/bitmaps/off.xbm b/interface/bitmaps/off.xbm
new file mode 100644 (file)
index 0000000..1ed99a7
--- /dev/null
@@ -0,0 +1,9 @@
+#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, };
diff --git a/interface/bitmaps/on.xbm b/interface/bitmaps/on.xbm
new file mode 100644 (file)
index 0000000..5da25c5
--- /dev/null
@@ -0,0 +1,9 @@
+#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, };
diff --git a/interface/bitmaps/slow.xbm b/interface/bitmaps/slow.xbm
new file mode 100644 (file)
index 0000000..3c3c6db
--- /dev/null
@@ -0,0 +1,14 @@
+#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};
diff --git a/interface/x_trace.c b/interface/x_trace.c
new file mode 100644 (file)
index 0000000..2e0eca9
--- /dev/null
@@ -0,0 +1,1116 @@
+/*
+    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); 
+}
diff --git a/interface/x_trace.h b/interface/x_trace.h
new file mode 100644 (file)
index 0000000..5e01d9b
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+    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 */
diff --git a/interface/xdnd.c b/interface/xdnd.c
new file mode 100644 (file)
index 0000000..cbfc7a7
--- /dev/null
@@ -0,0 +1,656 @@
+/* 
+ * 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;
+}
diff --git a/interface/xdnd.h b/interface/xdnd.h
new file mode 100644 (file)
index 0000000..ba75eb9
--- /dev/null
@@ -0,0 +1,118 @@
+/* 
+ * 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