Global.h
gehe zur Dokumentation dieser Datei
00001 
00028 // ------------------------------------------------------------------
00029 // Mutabor 2.win, 1997, R.Kraufle
00030 // Globale Defiitionen der DLL
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 /* #define alloca xmalloc */
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 /* (=Maximale Breite eines Tonsystems */
00054 #define MAX_MIDI 32
00055 /* (=Max. Anzahl Bytes in MIDIOUT / MIDIIN) */
00056 
00057 #define FREQUENZ_TO_MIDI(x) (log((x)/440.0)/0.05776226504666210908 + 69)
00058 /* Die Zahl 0.0577... ist log(Zwoelfte Wurzel aus zwei) */
00059 
00060 #define FAKTOR_TO_MIDI(x) (17.31234049066756089 * log(x))
00061 /* 17.31... ist 12/log(2)  */
00062 
00063 #define MAX_BOX 256   // Anzahl der Boxen/Instumente
00064 
00065 void init_yylex (void);
00066 
00067 /****** Allgemeine Strukturen *******/
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;   /* Der soundsovielte ,
00093                                                                                                                                                                                                                                                                                                                                                                                             der deklariert ist. */
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 /*********  Definition der Intervalle als verkettete Liste ********/
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 /*********  Definition der Tîne als verkettete Liste ********/
00150 /*********  Der Komplexanteil ist eine Folge von Intervallen,
00151             die zum Grundton addiert werden.  ***********/
00152 
00153 /****
00154 enum komplex_typ {komplex_anteil_relativ, komplex_anteil_faktor};
00155 struct komplex_anteil {
00156     enum komplex_typ komplex_typ;
00157     union {
00158         struct {
00159             double faktor;
00160             const char * linke_grenze;
00161             const char * rechte_grenze;
00162         } komplex_anteil_relativ;
00163         struct {
00164             double faktor;
00165             const char * name;
00166         } komplex_anteil_faktor;
00167     } u;
00168     struct komplex_anteil * next;
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 /*********  Definition der Tonsysteme als verkettete Liste ********/
00213 /********   Ein Tonsystem enthÑlt eine Liste mit den enthaltenen
00214             Tînen. Der Name eines Tons ist (NULL) wenn dieser Ton
00215             nicht gÅltig ist, ansonsten der Name des Tons.
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 /*********  Definition der Umstimmungen als verkettete Liste ********/
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 struct aufruf_liste {
00249     const char * name;
00250     struct argument_liste * argument_liste;
00251     struct aufruf_liste * next;
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 /*********  Definition der Harmonien als verkettete Liste ********/
00357 
00358 struct taste
00359 {
00360         int code;     //int taste - Namensprobleme
00361         char stern;      /* TRUE oder FALSE, ob Stern deklariert ist */
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 /*********  Definition der Logiken als verkettete Liste ********/
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 /*********  Definition der Instrumente als verkettete Liste ********/
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 /* Gemeinsame Funktionen zwischen Compiler und Parser */
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, //zahl_oder_parameter_typ zahl_oder_parameter,
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 /* void init_umstimmungs_bund_liste (void); */
00601 void get_umstimmung_umstimmungs_bund (void);
00602 
00603 /* void get_umstimmungs_bund_element (const char * name); */
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 /* Gemeinsame Funktionen zwischen Compiler und Codegenerator */
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 /* Globale Variablen des Compilers mit dem Parser */
00702 
00703 extern FILE * quelldatei;
00704 
00705 extern long anzahl_eingelesene_zeichen;
00706 
00707 /* Funktionen zur Speicherverwaltung */
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 /* Globale Variablen des Compilers mit dem Codegenerator und
00718                                        dem Tabellengenerator  */
00719 
00720 /*********** Es folgen die Wurzeln der Listen.
00721              Jede Liste ist nur einmal und global vorhanden,
00722              da die Sprache NICHT rekursiv ist.
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 /*void disable_protokoll_frame( void );
00758 void enable_protokoll_frame( void ); */
00759 
00760 /* TV_Protokoll
00761 
00762 extern char laufzeit_tonsystem_string[MAXLINE_AKTIONEN][30];
00763 extern int protokoll_ausgabezeile;*/
00764 
00765 /* Protokollsteuerung :
00766 extern int protokollfunktionen_aktiv;
00767 extern int protokollfunktion_aktionsausgabe;
00768 extern char * laufzeit_aktionen_string[MAXLINE_AKTIONEN];
00769 extern char laufzeit_tonsystem_string[MAXLINE_AKTIONEN][30];
00770 extern char aktionen_puffer[MAXLINE_AKTIONEN][30];
00771 extern int aktionen_puffer_in;
00772 extern int aktionen_puffer_out; */
00773 #endif
00774 
00775 

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