home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / glib / part10 / dx7s.mnu next >
Text File  |  1989-05-14  |  22KB  |  695 lines

  1. /* $Id: dx7s.mnu,v 1.6 89/05/06 17:13:23 lee Exp $
  2.  * GLIB - a Generic LIBrarian and editor for synths
  3.  *
  4.  * DX-7s routines
  5.  *
  6.  * Scott Snyder - ssnyder@citromeo.bitnet, ssnyder@romeo.caltech.edu
  7.  * $Log:    dx7s.mnu,v $
  8.  * Revision 1.6  89/05/06  17:13:23  lee
  9.  * rel. to comp.sources.misc
  10.  * 
  11.  */
  12.  
  13. #define ARYLEN(a) (sizeof((a))/sizeof((a)[0]))
  14.  
  15. #define BITS(x, start, len) (((x) >> (start)) & ((1<<(len))-1))
  16.  
  17. #define OVERLAY1
  18.  
  19. #define VCED_SIZE 155
  20. #define ADVCED_SIZE 49
  21.  
  22. #define VMEM_SIZE 128
  23. #define ADVMEM_SIZE 35
  24. #define NVOICES 32
  25.  
  26. #include "glib.h"
  27. #include <ctype.h>
  28.  
  29. char *visnum(), *visonoff(), *vism3num(), *viswave(), *vismono();
  30. char *visfreq(), *visdx1a(), *visr2num();
  31.  
  32. char *visxq(), *visxx(), *vism7num(), *visx7note(), *visx7crv();
  33. char *visx7a(), *visx7wave(), *visx7brkpt();
  34.  
  35. char *visxq1(), *visxq2(), *visxq3();
  36. char *visxq4(), *visxq5(), *visxq6();
  37. char *visxx1(), *visxx2(), *visxx3();
  38. char *visxx4(), *visxx5(), *visxx6();
  39.  
  40. char *vissport(),  *visspbmode(), *visspegrng(), *visssngl();
  41. char *vissmono(),  *vissedmde(), *vissmpm(),  *vissmam();
  42. char *vissmeg(), *vissm4(),   *visssclm(),   *visx7crv();
  43.  
  44. char *vissf1(), *vissf2(), *vissf3();
  45. char *vissf4(), *vissf5(), *vissf6();
  46.  
  47. #define RESERVESIZE VMEM_SIZE
  48.  
  49. /* This array contains arbitrary screen labels */
  50. struct labelinfo Ldx7S[] = {
  51. #MENU
  52.                       N: set name; q: quit; K: incr; J: decr; >: max; <: min  k
  53.                   space: play autonote Pitch  %   Vol  %   Dur  %   Chan  %  h l
  54.                                                                               j
  55.     Atk  Sust1 Sust2  Rls          Scal Out De  Rat  Sens  Brk  Depth  Curve
  56. OP Rt Lv Rt Lv Rt Lv Rt Lv  Freq   Mode Lvl tun Scl Key AM Pt   L  R   L    R
  57. -- -- -- -- -- -- -- -- -- ------- ---- --- --- --- --- -- ---- -- -- ---- ----
  58.  1 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  59.  2 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  60.  3 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  61.  4 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  62.  5 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  63.  6 %  %  %  %  %  %  %  %  %    %  %     %   %   %   %   % %    %  %  %    %
  64. PE %  %  %  %  %  %  %  %
  65.                                       Osc. Sync     %      Rnd Pitch      @
  66. Algorithm   %  LFO trigger   %        Feedback      %      Port. mode     @
  67. ============== LFO Speed     %        Middle C      %      Port. step     @
  68.                LFO Delay     %        PEG Range     %      Port. time     @
  69.                LFO AM Depth  %        PEG by vel    %
  70.                LFO PM Depth  %        PEG Rate Scl  %                     @
  71.                LFO Wave      %        PB Range      %      PM range       @
  72.                LFO Sync      %        PB Step       %      AM range       @
  73.                LFO PM Sense  %        PB Mode       %      EG bias        @
  74.                Unison detune %        Poly/Mono     %                     @
  75.                FC1 is CS1    %        Unison mode   %
  76. #END
  77. -1,-1,NULL
  78. };
  79.  
  80. /* This array defines all the editable parameters. */
  81. struct paraminfo Pdx7S[] = {
  82. "autopitch",    NULL, -1, -1,  %%, visnum, 0, 127, 60, 0,
  83. "autovol",    NULL, -1, -1,  %%, visnum, 0, 127, 63, 0,
  84. "autodur",    NULL, -1, -1,  %%, visnum, 1,  20,  5, 0,
  85. "autochan",    NULL, -1, -1,  %%, visnum, 1,  16,  1, 0,
  86.  
  87. "op1atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  88. "op1atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  89. "op1sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  90. "op1sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  91. "op1sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  92. "op1sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  93. "op1rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  94. "op1rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  95. "op1freq",    NULL, -1, -1,   %%, visxq1,  0, 4067, 0, 0,
  96. "op1fx",    NULL, -1, -1,   %%, vissf1, 0,    1, 0, 0,
  97. #O op1scalmode    ssclm    %%    1    0    0x20    5
  98. "op1outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  99. "op1detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  100. "op1ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  101. "op1tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  102. #O op1amsens    num        %%    7    3    0x38    3
  103. "op1brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  104. "op1ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  105. "op1rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  106. "op1lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  107. "op1rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  108. "op1modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  109.  
  110. "op2atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  111. "op2atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  112. "op2sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  113. "op2sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  114. "op2sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  115. "op2sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  116. "op2rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  117. "op2rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  118. "op2freq",    NULL, -1, -1,   %%, visxq2,  0, 4067, 0, 0,
  119. "op2fx",    NULL, -1, -1,   %%, vissf2, 0,    1, 0, 0,
  120. #O op2scalmode    ssclm    %%    1    0    0x10    4
  121. "op2outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  122. "op2detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  123. "op2ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  124. "op2tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  125. #O op2amsens    num        %%    7    3    0x07
  126. "op2brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  127. "op2ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  128. "op2rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  129. "op2lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  130. "op2rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  131. "op2modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  132.  
  133. "op3atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  134. "op3atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  135. "op3sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  136. "op3sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  137. "op3sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  138. "op3sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  139. "op3rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  140. "op3rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  141. "op3freq",    NULL, -1, -1,   %%, visxq3,  0, 4067, 0, 0,
  142. "op3fx",    NULL, -1, -1,   %%, vissf3, 0,    1, 0, 0,
  143. #O op3scalmode    ssclm    %%    1    0    0x08    3
  144. "op3outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  145. "op3detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  146. "op3ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  147. "op3tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  148. #O op3amsens    num        %%    7    2    0x38    3
  149. "op3brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  150. "op3ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  151. "op3rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  152. "op3lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  153. "op3rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  154. "op3modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  155.  
  156. "op4atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  157. "op4atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  158. "op4sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  159. "op4sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  160. "op4sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  161. "op4sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  162. "op4rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  163. "op4rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  164. "op4freq",    NULL, -1, -1,   %%, visxq4,  0, 4067, 0, 0,
  165. "op4fx",    NULL, -1, -1,   %%, vissf4, 0,    1, 0, 0,
  166. #O op4scalmode    ssclm    %%    1    0    0x04    2
  167. "op4outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  168. "op4detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  169. "op4ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  170. "op4tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  171. #O op4amsens    num        %%    7    2    0x07
  172. "op4brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  173. "op4ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  174. "op4rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  175. "op4lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  176. "op4rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  177. "op4modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  178.  
  179. "op5atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  180. "op5atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  181. "op5sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  182. "op5sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  183. "op5sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  184. "op5sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  185. "op5rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  186. "op5rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  187. "op5freq",    NULL, -1, -1,   %%, visxq5,  0, 4067, 0, 0,
  188. "op5fx",    NULL, -1, -1,   %%, vissf5, 0,    1, 0, 0,
  189. #O op5scalmode    ssclm    %%    1    0    0x02    1
  190. "op5outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  191. "op5detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  192. "op5ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  193. "op5tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  194. #O op5amsens    num        %%    7    1    0x38    3
  195. "op5brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  196. "op5ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  197. "op5rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  198. "op5lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  199. "op5rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  200. "op5modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  201.  
  202. "op6atkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  203. "op6atklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  204. "op6sust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  205. "op6sust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  206. "op6sust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  207. "op6sust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  208. "op6rlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  209. "op6rlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  210. "op6freq",    NULL, -1, -1,   %%, visxq6,  0, 4067, 0, 0,
  211. "op6fx",    NULL, -1, -1,   %%, vissf6, 0,    1, 0, 0,
  212. #O op6scalmode    ssclm    %%    1    0    0x01
  213. "op6outlevel",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  214. "op6detune",    NULL, -1, -1,   %%, vism7num,   0,   14, 0, 0,
  215. "op6ratscl",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  216. "op6tchsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  217. #O op6amsens    num        %%    7    1    0x07
  218. "op6brkpt",    NULL, -1, -1,   %%, visx7brkpt,0,   99, 0, 0,
  219. "op6ldepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  220. "op6rdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  221. "op6lcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  222. "op6rcurve",    NULL, -1, -1,   %%, visx7crv,  0,    3, 0, 0,
  223. "op6modsens",    NULL, -1, -1,-1,-1, visnum,     0,    3, 0, 0,
  224.  
  225. "pegatkrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  226. "pegatklv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  227. "pegsust1rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  228. "pegsust1lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  229. "pegsust2rt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  230. "pegsust2lv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  231. "pegrlsrt",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  232. "pegrlslv",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  233.  
  234. "oscsync",    NULL, -1, -1,   %%, visonoff,   0,    1, 0, 0,
  235. "algorithm",    NULL, -1, -1,   %%, visx7a,    0,   31, 0, 0,
  236. #O lfotrig    ssngl    %%    1    4    0x04    2
  237. "feedback",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  238. "lfospeed",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  239. "transpose",    NULL, -1, -1,   %%, visx7note, 0,   48, 0, 0,
  240. "lfodelay",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  241. #O pegrange    spegrng    %%    3    4    0x03
  242. "lfoamdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  243. #O pegvel    onoff        %%    1    4    0x08    3
  244. "lfopmdepth",    NULL, -1, -1,   %%, visnum,     0,   99, 0, 0,
  245. #O pegratscl    num        %%    7    24    0x07
  246. "lfowave",    NULL, -1, -1,   %%, visx7wave, 0,    5, 0, 0,
  247. #O pbrange    num        %%    12    5    0x3C    2
  248. "lfosync",    NULL, -1, -1,   %%, visonoff,   0,    1, 0, 0,
  249. #O pbstep    num        %%    12    6    0x0F
  250. "lfopmsens",    NULL, -1, -1,   %%, visnum,     0,    7, 0, 0,
  251. #O pbmode    spbmode    %%    3    6    0x30    4
  252. #O unidetune    num        %%    7    34    0x07
  253. #O polymono    smono    %%    1    5    0x01
  254. #O fc1_cs1    onoff        %%    1    34    0x08    3
  255. #O unison    onoff        %%    1    5    0x02    1
  256.  
  257. #O rndpitch    num        @@    7    4    0x70    4
  258. #O portmode    sport    @@    1    7    0x01
  259. #O portstep    num        @@    12    7    0x1E    1
  260. #O porttime    num        @@    99    8
  261.  
  262. /*
  263.  * note: for proper operation of this hack, the 'edit mode' parm must be
  264.  *  displayed before any of the dummy parms when the screen is first being
  265.  *  drawn. making it alphabetically less will accomplish this.
  266.  */
  267.  
  268. "_aeditmode",    NULL, -1, -1,   @@, vissedmde, 0,  5, 0, 0,
  269. "_dummy_pm",    NULL, -1, -1,   @@, vissmpm,  0, 99, 0, 0,
  270. "_dummy_am",    NULL, -1, -1,   @@, vissmam,  0, 99, 0, 0,
  271. "_dummy_eg",    NULL, -1, -1,   @@, vissmeg,  0, 99, 0, 0,
  272. "_dummy4",    NULL, -1, -1,   @@, vissm4,   0, 99, 0, 1,
  273.  
  274. #O mw_pm    num        --    99    9
  275. #O mw_am    num        --    99    10
  276. #O mw_eg    num        --    99    11
  277. #O mw_vol    num        --    99    -1
  278.  
  279. #O fc1_pm    num        --    99    12
  280. #O fc1_am    num        --    99    13
  281. #O fc1_eg    num        --    99    14
  282. #O fc1_vol    num        --    99    15
  283.  
  284. #O fc2_pm    num        --    99    26
  285. #O fc2_am    num        --    99    27
  286. #O fc2_eg    num        --    99    28
  287. #O fc2_vol    num        --    99    29
  288.  
  289. #O midi_pm    num        --    99    30
  290. #O midi_am    num        --    99    31
  291. #O midi_eg    num        --    99    32
  292. #O midi_vol    num        --    99    33
  293.  
  294. #O bc_pm    num        --    99    16
  295. #O bc_am    num        --    99    17
  296. #O bc_eg    num        --    99    18
  297. #O bc_pitchb    num        --    100    19
  298.  
  299. #O at_pm    num        --    99    20
  300. #O at_am    num        --    99    21
  301. #O at_eg    num        --    99    22
  302. #O at_pitchb    num        --    100    23
  303.  
  304. NULL,    NULL, -1, -1, -1, -1, visnum, 0, 0, 0, 0
  305. };
  306.  
  307. char *vissmono(v)
  308. int v;
  309. {
  310.   showparam(parmindex("portmode"), 0);
  311.   return vismono(v);
  312. }
  313.  
  314. char *visssngl(v)
  315. int v;
  316. {
  317.   if (v == 0)
  318.     return "Single";
  319.   else
  320.     return "Multi";
  321. }
  322.  
  323. char *visspegrng(v)
  324. int v;
  325. {
  326.   switch (v) {
  327.     case 0: return "8oct";
  328.     case 1: return "2oct";
  329.     case 2: return "1oct";
  330.     case 3: return "1/2oct";
  331.     default: return "???";
  332.   }
  333. }
  334.  
  335. char *visspbmode(v)
  336. int v;
  337. {
  338.   switch (v) {
  339.     case 0: return "Norm";
  340.     case 1: return "Low";
  341.     case 2: return "High";
  342.     case 3: return "Key On";
  343.     default: return "???";
  344.   }
  345. }
  346.  
  347. char *vissport(v)
  348. int v;
  349. {
  350.   if (getval("polymono") == 0)
  351.     if (v == 0)
  352.       return "Retain";
  353.     else
  354.       return "Follow";
  355.   else
  356.     if (v == 0)
  357.       return "Fingrd";
  358.     else
  359.       return "Fulltm";
  360. }
  361.  
  362. char *edmdes[] = {
  363.   "Modulation Wheel",
  364.   "Aftertouch",
  365.   "Breath Control",
  366.   "Foot Control 1",
  367.   "Foot Control 2",
  368.   "MIDI Control",
  369. };
  370.  
  371. char *edmde_prefixes[] = {"mw", "at", "bc", "fc1", "fc2", "midi",};
  372.  
  373. char *mk_mode_parm(v, suffix)
  374. unsigned v;
  375. char *suffix;
  376. {
  377.   static char buf[20];
  378.  
  379.   if (v < ARYLEN(edmde_prefixes)) {
  380.     (void)sprintf(buf, "%s_%s", edmde_prefixes[v], suffix);
  381.     return buf;
  382.   }
  383.   else return "???";
  384. }
  385.  
  386. char *vissedmde(v, eras)
  387. unsigned v, eras;
  388. {
  389.   int j;
  390.   static char buf[30];
  391.  
  392.   if (eras) {
  393.     showparam(parmindex("_dummy_pm"), 1);
  394.     showparam(parmindex("_dummy_am"), 1);
  395.     showparam(parmindex("_dummy_eg"), 1);
  396.     showparam(parmindex("_dummy4"), 1);
  397.   }
  398.   else {
  399.     setval("_dummy_pm", getval(mk_mode_parm(v, "pm")));
  400.     setval("_dummy_am", getval(mk_mode_parm(v, "am")));
  401.     setval("_dummy_eg", getval(mk_mode_parm(v, "eg")));
  402.  
  403.     showparam(parmindex("_dummy_pm"), 0);
  404.     showparam(parmindex("_dummy_am"), 0);
  405.     showparam(parmindex("_dummy_eg"), 0);
  406.  
  407.     j = parmindex("_dummy4");
  408.     if (v == 0)    /* MW */
  409.       disableparm(j);
  410.     else {
  411.       enableparm(j);
  412.       if (v == 1 || v == 2) {  /* BC, AT */
  413.         P[j].p_max = 100;
  414.         setval("_dummy4", getval(mk_mode_parm(v, "pitchb")));
  415.       }
  416.       else {
  417.         P[j].p_max = 99;
  418.         setval("_dummy4", getval(mk_mode_parm(v, "vol")));
  419.       }
  420.       showparam(j, 0);
  421.     }
  422.   }
  423.  
  424.   (void)sprintf(buf, "~15l%s", v < ARYLEN(edmdes) ? edmdes[v] : "???");
  425.   return buf;
  426. }
  427.  
  428. char *vissmpm(v)
  429. int v;
  430. {
  431.   setval(mk_mode_parm((unsigned)getval("_aeditmode"), "pm"), v);
  432.   return visnum(v);
  433. }
  434.  
  435. char *vissmam(v)
  436. int v;
  437. {
  438.   setval(mk_mode_parm((unsigned)getval("_aeditmode"), "am"), v);
  439.   return visnum(v);
  440. }
  441.  
  442. char *vissmeg(v)
  443. int v;
  444. {
  445.   setval(mk_mode_parm((unsigned)getval("_aeditmode"), "eg"), v);
  446.   return visnum(v);
  447. }
  448.  
  449. char *vissm4(v)
  450. int v;
  451. {
  452.   int mode = getval("_aeditmode");
  453.   static char buf[40];
  454.  
  455.   if (mode == 1 || mode == 2) { /* BC, AT */
  456.     setval(mk_mode_parm((unsigned)mode, "pitchb"), v);
  457.     (void)sprintf(buf, "~15lPitch Bias~5 %s", visnum(v-50));
  458.     return buf;
  459.   }
  460.   else {
  461.     setval(mk_mode_parm((unsigned)mode, "vol"), v);
  462.     (void)sprintf(buf, "~15lVolume Range~3 %s", visnum(v));
  463.     return buf;
  464.   }
  465. }
  466.  
  467. char *visssclm(v)
  468. int v;
  469. {
  470.   if (v == 0)
  471.     return "Norm";
  472.   else
  473.     return "Frac";
  474. }
  475.  
  476. char *vissf1(v) { return visxx(v, 1, 1); }
  477. char *vissf2(v) { return visxx(v, 2, 1); }
  478. char *vissf3(v) { return visxx(v, 3, 1); }
  479. char *vissf4(v) { return visxx(v, 4, 1); }
  480. char *vissf5(v) { return visxx(v, 5, 1); }
  481. char *vissf6(v) { return visxx(v, 6, 1); }
  482.  
  483. dx7Sdin(data)
  484. char *data;
  485. {
  486.   int op;
  487.  
  488. #SETVAL
  489.  
  490.   dx7din(data);
  491.  
  492.   for (op=1; op <= 6; op++)
  493.     setopval(op, "modsens", 0);
  494. }
  495.  
  496. dx7Sdout(data)
  497. char *data;
  498. {
  499. #GETVAL
  500.   dx7dout(data);
  501. }
  502.  
  503. dx7Sadvmemtoadvced(in, out)
  504. char *in, *out;
  505. {
  506.   int op;
  507.  
  508.   for (op=1; op <= 6; op++)
  509.     out[6-op] = BITS(in[0], (6-op), 1);        /* scaling mode */
  510.   out[ 6] = BITS(in[1], 0, 3);            /* op6 am sens */
  511.   out[ 7] = BITS(in[1], 3, 3);            /* op5 am sens */
  512.   out[ 8] = BITS(in[2], 0, 3);            /* op4 am sens */
  513.   out[ 9] = BITS(in[2], 3, 3);            /* op3 am sens */
  514.   out[10] = BITS(in[3], 0, 3);            /* op2 am sens */
  515.   out[11] = BITS(in[3], 3, 3);            /* op1 am sens */
  516.  
  517.   out[12] = BITS(in[4], 0, 2);            /* pegrange        */
  518.   out[13] = BITS(in[4], 2, 1);            /* lfotrig        */
  519.   out[14] = BITS(in[4], 3, 1);            /* pegvel        */
  520.   out[15] = BITS(in[5], 0, 2);            /* polymono/unison    */
  521.   out[16] = BITS(in[5], 2, 4);            /* pbrange        */
  522.   out[17] = BITS(in[6], 0, 4);            /* pbstep        */
  523.   out[18] = BITS(in[6], 4, 2);            /* pbmode        */
  524.   out[19] = BITS(in[4], 4, 3);            /* rndpitch        */
  525.   out[20] = BITS(in[7], 0, 1);            /* portmode        */
  526.   out[21] = BITS(in[7], 1, 4);            /* portstep        */
  527.   out[22] = in[8];                /* porttime        */
  528.  
  529.   out[23] = in[9];                /* mw_pm        */
  530.   out[24] = in[10];                /* mw_am        */
  531.   out[25] = in[11];                /* mw_eg        */
  532.  
  533.   out[26] = in[12];                /* fc1_pm        */
  534.   out[27] = in[13];                /* fc1_am        */
  535.   out[28] = in[14];                /* fc1_eg        */
  536.   out[29] = in[15];                /* fc1_vol        */
  537.  
  538.   out[30] = in[16];                /* bc_pm        */
  539.   out[31] = in[17];                /* bc_am        */
  540.   out[32] = in[18];                /* bc_eg        */
  541.   out[33] = in[19];                /* bc_pitchb        */
  542.  
  543.   out[34] = in[20];                /* at_pm        */
  544.   out[35] = in[21];                /* at_am        */
  545.   out[36] = in[22];                /* at_eg        */
  546.   out[37] = in[23];                /* at_pitchb        */
  547.  
  548.   out[38] = BITS(in[24], 0, 3);            /* pegratscl        */
  549.  
  550.   out[39] = in[26];                /* fc2_pm        */
  551.   out[40] = in[27];                /* fc2_am        */
  552.   out[41] = in[28];                /* fc2_eg        */
  553.   out[42] = in[29];                /* fc2_vol        */
  554.  
  555.   out[43] = in[30];                /* midi_pm        */
  556.   out[44] = in[31];                /* midi_am        */
  557.   out[45] = in[32];                /* midi_eg        */
  558.   out[46] = in[33];                /* midi_vol        */
  559.  
  560.   out[47] = BITS(in[34], 0, 3);            /* unidetune        */
  561.   out[48] = BITS(in[34], 3, 1);            /* fc1_cs1        */
  562. }  
  563.  
  564. dx7Ssadvced(data)
  565. char *data;
  566. {
  567.   return dx7send_bulk(5, ADVCED_SIZE, data);
  568. }
  569.  
  570. dx7Ssedit(data)
  571. char *data;
  572. {
  573.   char edmem[ADVCED_SIZE];
  574.  
  575.   dx7Sadvmemtoadvced(data+128, edmem);
  576.   return dx7sedit(data) || dx7Ssadvced(edmem);
  577. }
  578.  
  579. static int alloc_bufs(vmem, advmem)
  580. char **vmem, **advmem;
  581. {
  582.   if ((*vmem = (char *)malloc(NVOICES * VMEM_SIZE)) != NULL) {
  583.     if ((*advmem = (char *)malloc(NVOICES * ADVMEM_SIZE)) != NULL)
  584.       return 0;
  585.     free(*vmem);
  586.   }
  587.  
  588.   Reason = "Couldn't allocate enough buffer space";
  589.   return 1;
  590. }
  591.  
  592. static split_data(data, vmem, advmem)
  593. char *data, *vmem, *advmem;
  594. {
  595.   int i;
  596.  
  597.   for (i=0; i<NVOICES; i++) {
  598.     memcpy(vmem, data, VMEM_SIZE);
  599.     memcpy(advmem, data+VMEM_SIZE, ADVMEM_SIZE);
  600.     data += VMEM_SIZE + ADVMEM_SIZE;
  601.     vmem += VMEM_SIZE;
  602.     advmem += ADVMEM_SIZE;
  603.   }
  604. }
  605.  
  606. static combine_data(data, vmem, advmem)
  607. char *data, *vmem, *advmem;
  608. {
  609.   int i;
  610.  
  611.   for (i=0; i<NVOICES; i++) {
  612.     memcpy(data, vmem, VMEM_SIZE);
  613.     memcpy(data+VMEM_SIZE, advmem, ADVMEM_SIZE);
  614.     data += VMEM_SIZE + ADVMEM_SIZE;
  615.     vmem += VMEM_SIZE;
  616.     advmem += ADVMEM_SIZE;
  617.   }
  618. }
  619.  
  620. dx7Ssbulk(data)
  621. char *data;
  622. {
  623.   char *vmem, *advmem;
  624.   int retstat;
  625.  
  626.   if (alloc_bufs(&vmem, &advmem)) return 1;
  627.   split_data(data, vmem, advmem);
  628.  
  629.   retstat = dx7sbulk(vmem) || dx7send_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
  630.  
  631.   free(vmem);
  632.   free(advmem);
  633.  
  634.   return retstat;
  635. }
  636.  
  637. dx7Sgbulk(data)
  638. char *data;
  639. {
  640.   char *vmem, *advmem;
  641.   int retstat;
  642.  
  643.   if (alloc_bufs(&vmem, &advmem)) return 1;
  644.  
  645.   retstat = dx7gbulk(vmem) || dx7get_bulk(6, NVOICES * ADVMEM_SIZE, advmem);
  646.  
  647.   if (!retstat) combine_data(data, vmem, advmem);
  648.  
  649.   free(vmem);
  650.   free(advmem);
  651.  
  652.   return retstat;
  653. }
  654.  
  655. static char deflt_advmem[] = {
  656.  0, 0, 0, 0, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 
  657.  0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
  658.  
  659. /* read a DX7 file as a DX7S file */
  660.  
  661. dx7Sread_dx7(f, data)
  662. FILE *f;
  663. char *data;
  664. {
  665.   int v;
  666.  
  667.   message("Reading DX7 bank");
  668.  
  669.   for (v=0; v<NVOICES; v++) {
  670.     (void)fread(data, VMEM_SIZE, 1, f);
  671.     memcpy(data+VMEM_SIZE, deflt_advmem, ADVMEM_SIZE);
  672.     data += VMEM_SIZE + ADVMEM_SIZE;
  673.   }
  674. }
  675.  
  676. /* read a DX7s file as a DX7 file */
  677.  
  678. dx7read_dx7S(f, data)
  679. FILE *f;
  680. char *data;
  681. {
  682.   int v;
  683.  
  684.   message("Reading DX7s bank");
  685.  
  686. #ifndef SEEK_CUR
  687. #define SEEK_CUR 1
  688. #endif
  689.   for (v=0; v<NVOICES; v++) {
  690.     (void)fread(data, VMEM_SIZE, 1, f);
  691.     fseek(f, (long)ADVMEM_SIZE, SEEK_CUR);
  692.     data += VMEM_SIZE;
  693.   }
  694. }
  695.