Interpre.h
gehe zur Dokumentation dieser Datei
00001 
00034 // ------------------------------------------------------------------
00035 // Mutabor 2.win, 1997, R.Krauße
00036 // Interpretation der Logiken zur Laufzeit
00037 // ------------------------------------------------------------------
00038 
00039 #if ! defined (__INTERPRE_H_INCLUDED)
00040 #define __INTERPRE_H_INCLUDED
00041 
00042 #include "Global.h"
00043 
00044 /* Zur Umrechnung in die Midi-Darstellung
00045    als Gleitpunktzahl in long.
00046    Erstes Byte Vorkommastellen, drei Bytes Nachkommastellen. */
00047 #define DOUBLE_TO_LONG(x) ((long int) ((x) * (1L<<24)))
00048 
00049 void message_tasten_liste( void );
00050 
00051 /* Datenstrukturen: */
00052 
00053 typedef struct TSYS
00054 {
00055         int anker;
00056         int breite;
00057         long periode;
00058         long ton[MAX_BREITE];
00059 } tone_system;
00060 
00061 typedef struct PTRN
00062 {
00063         int tonigkeit[MAX_BREITE];
00064 } PATTERNN;
00065 
00066 /*****************************
00067 struct midiereignis { struct midiereignis * next;
00068                       int * first;
00069                       int * scanpos;
00070                       void (*aufruf)();
00071                       const char * name;
00072 };
00073 
00074 struct keyboardereignis { int taste;
00075                           struct keyboardereignis * next;
00076                           void (*aufruf)();
00077                           const char * name;
00078 };
00079 
00080 struct harmonieereignis { PATTERNN * pattern;
00081                           int ist_harmonieform;
00082                           int vortaste;
00083                           int nachtaste;
00084                           struct harmonieereignis * next;
00085                           void (*aufruf)();
00086                           const char * name;
00087 };
00088 
00089 ********************/
00090 
00091 
00092 
00093 /* Funktionsprototypen: */
00094 
00095 void HARMONIE_analyse(int instr,PATTERNN * pattern);
00096 void MIDI_analyse( int code );
00097 void KEYB_analyse( int key );
00098 void MAUS_analyse(int mx, int my);
00099 
00100 void Add_Key(int instr, int key, int velo);
00101 void Delete_Key(int instr, int key);
00102 
00103 tone_system * lz_get_tonsystem(int instr);
00104 PATTERNN * get_pattern(int instr);
00105 
00106 
00107 /* Standardstrukturen zur Laufzeit fr den Interpreter */
00108 
00109 
00110 enum ton_einstell_typ { einstell_stumm, einstell_gleich,
00111                         einstell_absolut, einstell_relativ };
00112 
00113 struct ton_einstell
00114 {
00115         enum ton_einstell_typ ton_einstell_typ;
00116         union {
00117 
00118                 struct {
00119                         long wert;
00120                 }
00121 
00122                 einstell_absolut;
00123 
00124                 struct {
00125                         long wert;
00126                 }
00127 
00128                 einstell_relativ;
00129         } u;
00130 
00131         struct ton_einstell * next;
00132 };
00133 
00134 struct case_element
00135 {
00136         int case_wert;
00137         char is_default;
00138 
00139         struct do_aktion * case_aktion;
00140 
00141         struct case_element * next;
00142 };
00143 
00144 
00145 struct interpreter_parameter_liste
00146 {
00147         int (* werte_feld) [MAX_BOX];
00148 
00149         struct interpreter_parameter_liste * next;
00150 };
00151 
00152 
00153 
00154 /*
00155 typedef int * parameter_liste[16];
00156 */
00157 
00158 enum aufruf_typ { aufruf_logik, aufruf_tonsystem,
00159                   aufruf_umst_taste_abs, aufruf_umst_breite_abs,
00160                   aufruf_umst_wiederholung_abs,
00161                   aufruf_umst_wiederholung_rel,
00162                   aufruf_umst_taste_rel,
00163                   aufruf_umst_breite_rel, aufruf_umst_toene_veraendert,
00164                   aufruf_umst_umst_bund, aufruf_umst_umst_case,
00165                   aufruf_midi_out };
00166 
00167 struct do_aktion
00168 {
00169         /*
00170             parameter_liste * parameter;
00171         */
00172 
00173         const char * name;
00174 
00175         enum aufruf_typ aufruf_typ;
00176 
00177         union
00178         {
00179 
00180                 struct {
00181 
00182                         struct do_aktion * einstimmung;
00183 
00184                         struct harmonie_ereignis ** lokal_harmonie;
00185 
00186                         struct keyboard_ereignis ** lokal_keyboard;
00187 
00188                         struct midi_ereignis     ** lokal_midi;
00189                 }
00190 
00191                 aufruf_logik;
00192 
00193                 struct {
00194                         tone_system * tonsystem;
00195                 }
00196 
00197                 aufruf_tonsystem;
00198 
00199                 struct {
00200                         int * wert;
00201                 }
00202 
00203                 aufruf_umst_taste_abs;
00204 
00205                 struct {
00206                         int * wert;
00207                 }
00208 
00209                 aufruf_umst_breite_abs;
00210 
00211                 struct {
00212                         long faktor;
00213                 }
00214 
00215                 aufruf_umst_wiederholung_abs;
00216 
00217                 struct {
00218                         long faktor;
00219                 }
00220 
00221                 aufruf_umst_wiederholung_rel;
00222 
00223                 struct {
00224                         int * wert;
00225                         char rechenzeichen;
00226                 }
00227 
00228                 aufruf_umst_taste_rel;
00229 
00230                 struct {
00231                         int * wert;
00232                         char rechenzeichen;
00233                 }
00234 
00235                 aufruf_umst_breite_rel;
00236 
00237                 struct {
00238 
00239                         struct ton_einstell * tonliste;
00240                 }
00241 
00242                 aufruf_umst_toene_veraendert;
00243 
00244                 struct {
00245                         int * wert;
00246 
00247                         struct case_element * umst_case;
00248                 }
00249 
00250                 aufruf_umst_umst_case;
00251 
00252                 struct {
00253 
00254                         struct midiliste * out_liste;
00255                 }
00256 
00257                 aufruf_midi_out;
00258         }
00259 
00260         u;
00261 
00262         struct do_aktion * next;
00263 };
00264 
00265 
00266 
00267 struct midi_ereignis
00268 {
00269         int * first_pos;
00270         int * scan_pos;
00271 
00272         const char * name;
00273 
00274         struct do_aktion * aktion;
00275 
00276         struct logik * the_logik_to_expand;
00277 
00278         struct midi_ereignis * next;
00279 };
00280 
00281 struct keyboard_ereignis
00282 {
00283         char taste;
00284 
00285         const char * name;
00286 
00287         struct do_aktion * aktion;
00288 
00289         struct logik * the_logik_to_expand;
00290 
00291         struct keyboard_ereignis * next;
00292 };
00293 
00294 struct harmonie_ereignis
00295 {
00296         PATTERNN * pattern;
00297         char ist_harmonieform;
00298         int vortaste;
00299         int nachtaste;
00300 
00301         const char * name;
00302 
00303         struct do_aktion * aktion;
00304 
00305         struct logik * the_logik_to_expand;
00306 
00307         struct harmonie_ereignis * next;
00308 };
00309 
00310 
00311 
00312 
00313 /* Globale Listen: */
00314 
00315 extern struct harmonie_ereignis *  first_harmonie[MAX_BOX];
00316 
00317 extern struct harmonie_ereignis ** last_global_harmonie[MAX_BOX];
00318 
00319 extern struct harmonie_ereignis ** first_lokal_harmonie;
00320 
00321 extern struct keyboard_ereignis *  first_keyboard[MAX_BOX];
00322 
00323 extern struct keyboard_ereignis ** last_global_keyboard[MAX_BOX];
00324 
00325 extern struct keyboard_ereignis ** first_lokal_keyboard;
00326 
00327 extern struct midi_ereignis     *  first_midi[MAX_BOX];
00328 
00329 extern struct midi_ereignis     ** last_global_midi[MAX_BOX];
00330 
00331 extern struct midi_ereignis     ** first_lokal_midi;
00332 
00333 extern int laufzeit_abstand[256];
00334 
00335 extern int laufzeit_zentrum[256];
00336 
00337 extern int laufzeit_meldungen_erlaubt; /* Hier gibt es 2 Level:
00338 
00339                                           0=keine Meldungen,
00340                                           1=normale Meldungen */
00341 
00342 extern int aktuelle_keyboard_box;
00343 
00344 extern int liegende_tasten[MAX_BOX][64];
00345 
00346 extern int liegende_tasten_max[MAX_BOX];
00347 
00348 #define SYNTHESIZER_TYP_KEINER    0
00349 #define SYNTHESIZER_TYP_FB01      1
00350 #define SYNTHESIZER_TYP_MULTI16   2
00351 #define SYNTHESIZER_TYP_GIS       3
00352 /* jedem Kanal seinen Synthesizer */
00353 
00354 #endif
00355 
00356 
00357 

Erzeugt am Sun Aug 21 2011 10:51:52 für Mutabor von doxygen 1.7.4