00001
00028
00029
00030
00031
00032
00033 #ifndef WX
00034 #define GERMAN
00035 #endif
00036
00037 #if ! defined (__GLOBAL_H_INCLUDED)
00038 #define __GLOBAL_H_INCLUDED
00039
00040 #include <stdio.h>
00041 #include <stdlib.h>
00042 #include <stdarg.h>
00043 #include <string>
00044 #include <math.h>
00045 #include "Defs.h"
00046
00047
00048 #define bcopy(from,to,n) memcpy((to),(from),(n))
00049 #define bzero(s,n) memset((s),0,(n))
00050 #define bcmp(b1,b2,len) memcmp((b1),(b2),(len))
00051
00052 #define MAX_BREITE 72
00053
00054 #define MAX_MIDI 32
00055
00056
00057 #define FREQUENZ_TO_MIDI(x) (log((x)/440.0)/0.05776226504666210908 + 69)
00058
00059
00060 #define FAKTOR_TO_MIDI(x) (17.31234049066756089 * log(x))
00061
00062
00063 #define MAX_BOX 256 // Anzahl der Boxen/Instumente
00064
00065 void init_yylex (void);
00066
00067
00068
00069 struct parameter_liste
00070 {
00071 const char * name;
00072
00073 struct parameter_liste * next;
00074 };
00075
00076 typedef int parameter_typ;
00077
00078 enum argument_typ {zahl, parameter};
00079
00080 struct argument
00081 {
00082 enum argument_typ argument_typ ;
00083 union {
00084
00085 struct {
00086 int zahl;
00087 }
00088
00089 zahl;
00090
00091 struct {
00092 int parameter_nummer;
00093
00094
00095 const char * parameter_name;
00096 }
00097
00098 parameter;
00099 } u;
00100 };
00101
00102 struct argument_liste
00103 {
00104
00105 struct argument argument;
00106
00107 struct argument_liste * next;
00108 };
00109
00110 struct midiliste
00111 {
00112 int midi_code;
00113
00114 struct midiliste * next;
00115 };
00116
00117
00118
00119 enum intervall_typ {intervall_absolut, intervall_komplex};
00120
00121 struct intervall
00122 {
00123 const char * name;
00124
00125 enum intervall_typ intervall_typ;
00126
00127 union
00128 {
00129
00130 struct {
00131 double intervall_wert;
00132 }
00133
00134 intervall_absolut;
00135
00136 struct {
00137
00138 struct komplex_intervall * komplex_liste;
00139 }
00140
00141 intervall_komplex;
00142 }
00143
00144 u;
00145
00146 struct intervall *next;
00147 };
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 struct komplex_intervall
00173 {
00174 double faktor;
00175
00176 const char * name;
00177
00178 struct komplex_intervall * next;
00179 };
00180
00181 enum ton_typ {ton_absolut, ton_komplex};
00182
00183 struct ton
00184 {
00185 const char * name;
00186
00187 enum ton_typ ton_typ;
00188
00189 union
00190 {
00191
00192 struct {
00193 double ton_wert;
00194 }
00195
00196 ton_absolut;
00197
00198 struct {
00199 const char * bezugston;
00200
00201 struct komplex_intervall * komplex_liste;
00202 }
00203
00204 ton_komplex;
00205 }
00206
00207 u;
00208
00209 struct ton * next;
00210 };
00211
00212
00213
00214
00215
00216
00217
00218
00219 struct tonsystem
00220 {
00221 const char *name;
00222
00223 int taste;
00224
00225 struct komplex_intervall *periode;
00226
00227 struct ton *toene;
00228
00229 struct tonsystem *next;
00230 };
00231
00232
00233
00234 enum umstimmung_typ {
00235 umstimmung_taste_abs,
00236 umstimmung_taste_rel,
00237 umstimmung_breite_abs,
00238 umstimmung_breite_rel,
00239 umstimmung_toene_veraendert,
00240 umstimmung_wiederholung_abs,
00241 umstimmung_wiederholung_rel,
00242 umstimmung_umstimmungsbund,
00243 umstimmung_umstimmungs_case,
00244 umstimmung_midi_out
00245 };
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 struct case_liste
00256 {
00257 int case_label;
00258 char is_default;
00259
00260 struct aktions_liste * case_aktion;
00261
00262 struct case_liste * next;
00263 };
00264
00265 struct umstimmung
00266 {
00267 const char *name;
00268
00269 struct parameter_liste * parameter_liste;
00270
00271 enum umstimmung_typ umstimmung_typ;
00272
00273 union
00274 {
00275
00276 struct {
00277
00278 struct argument argument;
00279 }
00280
00281 umstimmung_taste_abs;
00282
00283 struct {
00284
00285 struct argument argument;
00286 char rechenzeichen;
00287 }
00288
00289 umstimmung_taste_rel;
00290
00291 struct {
00292
00293 struct argument argument;
00294 }
00295
00296 umstimmung_breite_abs;
00297
00298 struct {
00299
00300 struct argument argument;
00301 char rechenzeichen;
00302 }
00303
00304 umstimmung_breite_rel;
00305
00306 struct {
00307
00308 struct ton * tonliste;
00309 }
00310
00311 umstimmung_toene_veraendert;
00312
00313 struct {
00314
00315 struct komplex_intervall * komplex_liste;
00316 }
00317
00318 umstimmung_wiederholung_abs;
00319
00320 struct {
00321
00322 struct komplex_intervall * komplex_liste;
00323 }
00324
00325 umstimmung_wiederholung_rel;
00326
00327 struct {
00328
00329 struct aktions_liste * aktions_liste;
00330 }
00331
00332 umstimmung_umstimmungsbund;
00333
00334 struct {
00335
00336 struct argument argument;
00337
00338 struct case_liste * umstimmungs_case_liste;
00339 }
00340
00341 umstimmung_umstimmungs_case;
00342
00343 struct {
00344
00345 struct midiliste * out_liste;
00346 }
00347
00348 umstimmung_midi_out;
00349 }
00350
00351 u;
00352
00353 struct umstimmung * next;
00354 };
00355
00356
00357
00358 struct taste
00359 {
00360 int code;
00361 char stern;
00362
00363 struct taste * next;
00364 };
00365
00366 struct harmonie
00367 {
00368 const char * name;
00369
00370 struct taste * tastenliste;
00371
00372 int bezugstaste;
00373
00374 struct harmonie * next;
00375 };
00376
00377
00378
00379
00380 enum ausloeser_typ {ausloeser_harmonie, ausloeser_harmonie_form,
00381 ausloeser_taste, ausloeser_midi_in,
00382 ausloeser_default};
00383
00384 struct ausloeser
00385 {
00386 enum ausloeser_typ ausloeser_typ;
00387 union {
00388
00389 struct {
00390 int vortaste;
00391
00392 const char * name;
00393
00394 int nachtaste;
00395 }
00396
00397 ausloeser_harmonie;
00398
00399 struct {
00400 int vortaste;
00401
00402 const char * name;
00403
00404 int nachtaste;
00405 }
00406
00407 ausloeser_harmonie_form;
00408
00409 struct {
00410 const char * taste;
00411 }
00412
00413 ausloeser_taste;
00414
00415 struct {
00416
00417 struct midiliste * midi_code;
00418 }
00419
00420 ausloeser_midi_in;
00421 } u;
00422 };
00423
00424
00425 enum aktions_typ {aktion_midi_out, aktion_aufruf};
00426
00427 struct aktions_liste
00428 {
00429 enum aktions_typ aktions_typ;
00430 union {
00431
00432 struct {
00433
00434 struct midiliste * midi_code;
00435 }
00436
00437 aktion_midi_out;
00438
00439 struct {
00440 const char * name;
00441
00442 struct argument_liste * argument_liste;
00443 }
00444
00445 aktion_aufruf;
00446 } u;
00447
00448 struct aktions_liste * next;
00449 };
00450
00451
00452
00453
00454 struct anweisung
00455 {
00456
00457 struct ausloeser * ausloeser;
00458
00459 struct aktions_liste * aktion;
00460
00461 struct anweisung * next;
00462 };
00463
00464
00465
00466 struct logik
00467 {
00468 const char * name;
00469
00470 struct ausloeser * ausloeser;
00471
00472 const char * einstimmungs_name;
00473
00474 struct anweisung * anweisungsliste;
00475
00476 struct logik * next;
00477 };
00478
00479
00480
00481 struct instrument
00482 {
00483 int midi_in;
00484 int midi_von;
00485 int midi_bis;
00486 int midi_umleit;
00487
00488 struct instrument * next;
00489 };
00490
00491 void xfree (void * pointer);
00492 void * xmalloc (size_t size);
00493 void * xrealloc (void * block, size_t newsize);
00494 void * xcalloc (size_t anzahl, size_t size);
00495
00496
00497
00498
00499 int yylex();
00500
00501 void yyerror(const char *);
00502
00503 int yyparse ();
00504
00505 void mutabor_programm_einlesen (const wxChar * filename) ;
00506
00507 void mutabor_tabellen_generator (void);
00508
00509 void mutabor_codegenerator(const char * filename);
00510
00511 void write_kompletten_code (FILE * zieldatei);
00512
00513 void get_new_intervall (const char * name, double wert);
00514
00515 void get_new_intervall_komplex (const char * name);
00516
00517 double get_wert_komplex_intervall (struct komplex_intervall * intervall);
00518
00519 void get_new_ton_absolut (const char * name, double wert);
00520
00521 void init_komplex_ton_list (void);
00522
00523 void get_new_faktor_anteil (double f, const char *name);
00524
00529 void get_new_ton_komplex_positive (const char *name, const char *bezugston);
00530
00531 void get_new_ton_komplex_negative (const char *name, const char *bezugston);
00532
00533 void init_ton_liste (void);
00534
00535 void get_new_ton_in_tonsystem (const char *name);
00536
00537 void get_new_tonsystem (const char *name, int taste);
00538
00539 void get_new_tonsystem_negative (const char *name, int taste);
00540
00541
00542 void init_parameter_liste (void);
00543
00544 void get_new_name_in_parameterlist (const char * name);
00545
00546 void get_new_number_in_parameterlist (double wert);
00547
00548 void init_argument_liste (void);
00549
00550 void get_new_name_in_argument_list (const char * parameter);
00551
00552 void get_new_number_in_argument_list (double parameter);
00553
00554 void init_aktions_liste (void);
00555
00556 void get_new_aktion_aufruf_element (const char * name);
00557
00558 void get_new_aktion_midi_out_element (void);
00559
00560 void init_umstimmung (const char * name);
00561
00562 void eintrage_parameterliste_in_umstimmung (void);
00563
00564 void get_new_umstimmung (void);
00565
00566 void get_umstimmung_taste_abs (
00567 enum argument_typ argument,
00568 double zahl_wert, const char * parameter);
00569
00570 void get_umstimmung_taste_rel (
00571 enum argument_typ argument,
00572 double zahl_wert, const char * parameter, char vorzeichen);
00573
00574 void get_umstimmung_breite_abs (
00575 enum argument_typ argument,
00576 double zahl_wert, const char * parameter);
00577
00578 void get_umstimmung_breite_rel (
00579 enum argument_typ argument,
00580 double zahl_wert, const char * parameter, char vorzeichen);
00581
00582 void init_umstimm_expression_list (void);
00583
00584 void get_umstimmung_tonhoehe_veraendert (void);
00585
00586 void get_new_umstimm_expression (const char * bezugston);
00587
00588 void get_new_umstimm_expression_positive (const char * bezugston);
00589
00590 void get_new_umstimm_expression_negative (const char * bezugston);
00591
00592 void get_umstimmung_wiederholung_abs (void);
00593
00594 void get_umstimmung_wiederholung_abs_negative (void);
00595
00596 void get_umstimmung_wiederholung_rel_positive (void);
00597
00598 void get_umstimmung_wiederholung_rel_negative (void);
00599
00600
00601 void get_umstimmung_umstimmungs_bund (void);
00602
00603
00604
00605 void init_umstimmungs_case_liste (void);
00606
00607 void get_umstimmung_umstimm_case_zahl (int selector);
00608
00609 void get_umstimmung_umstimm_case_parameter (const char * selector);
00610
00611 void init_umstimmungs_case_aktions_liste (void);
00612
00613 void get_umstimmungs_case_zahl_element (int konstante);
00614
00615 void get_umstimmungs_case_default_element (void);
00616
00617 void get_umstimmungs_case_aktions_element (const char * aktion);
00618
00619 void get_umstimmung_midi_out (void);
00620
00621
00622 void init_tastenliste (void);
00623
00624 void get_new_harmonie (const char * name, int bezugstaste);
00625
00626 void get_new_taste (int taste, char stern);
00627
00628 void init_ausloeser (void);
00629
00630 void get_aktion_midi_out (void);
00631
00632 void get_aktion_aufruf (const char * name);
00633
00634 void init_ausloeser (void);
00635
00636 void get_ausloeser_default (void);
00637
00638 void get_ausloeser_harmonie (void);
00639
00640 void get_ausloeser_harmonie_form (void);
00641
00642 void get_ausloeser_taste (const char * name);
00643
00644 void get_ausloeser_midi_in (void);
00645
00646 void init_anweisungs_liste (void);
00647
00648 void vervollstaendige_logik (void);
00649
00650 void init_integersequenz (void);
00651
00652 void get_new_integer_in_integersequenz (int wert);
00653
00654
00655 void init_anweisungs_liste (void);
00656
00657 void get_new_logik (const char * name, const char * einstimmung);
00658
00659 void get_new_anweisung (void);
00660
00661 void get_harmoniebezeichner (int vor_taste,
00662 const char * name,
00663 int nach_taste);
00664
00665 void get_instrument_dekl (int midi_in, int midi_von, int midi_bis, int midi_umleit,
00666
00667 struct instrument ** list_to_insert);
00668
00669
00670
00671 int ton_list_laenge (struct ton *list);
00672
00673 int tonsystem_list_laenge (struct tonsystem *list);
00674
00675 int umstimmungs_list_laenge (struct umstimmung *list);
00676
00677 int logik_list_laenge (struct logik *list);
00678
00679 int midi_list_laenge (struct midiliste *list);
00680
00681 int get_logik_nummer (const char * name, struct logik * liste);
00682
00683 struct ton * get_ton (const char * name, struct ton * liste);
00684
00685 struct intervall * get_intervall (const char * name,
00686
00687 struct intervall * liste);
00688
00689 struct tonsystem * parser_get_tonsystem (const char * name, struct tonsystem * liste);
00690
00691 struct umstimmung * get_umstimmung (const char * name, struct umstimmung * liste);
00692
00693 struct harmonie * get_harmonie (const char * name, struct harmonie * liste);
00694
00695 struct logik * get_logik (const char * name, struct logik * liste);
00696
00697 int intern_fgetc( FILE *stream );
00698
00699 int intern_ungetc( int c, FILE *stream );
00700
00701
00702
00703 extern FILE * quelldatei;
00704
00705 extern long anzahl_eingelesene_zeichen;
00706
00707
00708
00709 int init_speicher_total( void );
00710
00711 int loesche_speicher_total( void );
00712
00713 int init_laufzeit_speicher( void );
00714
00715 int loesche_laufzeit_speicher( void );
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726 extern struct intervall * list_of_intervalle;
00727
00728 extern struct ton * list_of_toene;
00729
00730 extern struct tonsystem * list_of_tonsysteme;
00731
00732 extern struct umstimmung * list_of_umstimmungen;
00733
00734 extern struct harmonie * list_of_harmonien;
00735
00736 extern struct logik * list_of_logiken;
00737
00738 extern struct instrument * list_of_instrumente;
00739
00740 extern struct instrument * list_of_config_instrumente;
00741
00742 extern int geheimcode;
00743
00744
00745 void show_line_number( int n );
00746
00749 #define LINE_DRAW_QUANTUM 17
00750
00751 extern int keys_changed[MAX_BOX];
00752
00753 extern int keys_changed_sum;
00754
00755 extern char KeepSound;
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773 #endif
00774
00775