Klassen | Makrodefinitionen | Typdefinitionen | Funktionen | Variablen
Templates

Klassen

class  MutRouteWnd

Makrodefinitionen

#define GETLINE
#define adjazent(a, b)
#define DRUMCHANNEL   9
#define GET_INDEX(taste, tonsystem)
#define GET_ABSTAND(taste, tonsystem)
#define GET_FREQ(taste, tonsystem)
#define ZWZ   1.059463094
#define LONG_TO_HERTZ(x)   (440.0*pow(ZWZ,((((float)x)/(double)16777216.0))-69))
#define LONG_TO_CENT(x)   ( ((float)x)/(double)167772.13 )
#define muT(x)   x
#define ZIFFER   (mutT('0') <= t[i] && t[i] <= mutT('9'))
#define TAG   ((GisTag*)Cursor)
#define TAGEND   ((GisTagEnd*)Cursor)
#define NOTE1   ((GisNote*)note1)
#define NOTE2   ((GisNote*)note2)
#define NOTE   ((GisNote*)note)
#define WTAG   ((GisTag*)(*Cursor))
#define WTAGEND   ((GisTagEnd*)token)
#define xz   5
#define yz   5
#define DEF_MHARRAY(T, name, baseType)
#define DEF_MHARRAYPTR(T, name, baseType)
#define DEF_STACK(T, name, baseType)
#define REUSE(type)   type
#define ICON(s)   wxIcon( s##_xpm )
#define SSCANF   sscanf
#define STUBBASE(stubtype, typestr)
#define STUB   STUBBASE("stub function","")
 functions or code that has to be written -- simple function
#define STUBCT(type)   STUBBASE("stub function",((const char *) (typeid(type).name())))
 functions or code that has to be written -- use for static class members
#define STUBC   STUBCT(*this)
 functions or code that has to be written -- use for normal class members
#define UNREACHABLE   STUBBASE("unreachable code","")
#define UNREACHABLECT(type)   STUBBASE("unreachable code",((const char *) (typeid(type).name())))
#define UNREACHABLEC   UNREACHABLECT(*this)
#define ABSTRACT_FUNCTION   STUBBASE("unreachable function","")
#define ABSTRACT_FUNCTIONCT(type)   STUBBASE("unreachable function",((const char *) (typeid(type).name())))
#define ABSTRACT_FUNCTIONC   ABSTRACT_FUNCTIONCT(*this)
#define MDI_FORCE_EXTERN

Typdefinitionen

typedef wxMBConv muConvAuto

Funktionen

void ChangeOutReferences (EDevice *from, EDevice *to)
EDeviceNewDevice (EDevice **List, DevType dt, const wxString &name, int devId, EDevice *oldPos, EDevice *newPos)
 create a new device.
DevType Str2DT (char *type)
RouteType Str2RT (mutChar *type)
 parse a string representation of a route type
EDeviceGetEOut (int nr)
char GetELine (char **p, char *s)
void ScanRoutes (char *config)
 read the routes from the configuration
void WriteRoutes (char **config)
 write the routes to the configuration
void CheckBoxesUsed ()
 synchronizes BoxUsed with the routes
int SmallestBoxUsed ()
void ScanDevices ()
 translate the GUI routing information to mutabor
static double get_intervall_wert (const char *name)
double get_wert_komplex_intervall (struct komplex_intervall *intervall)
int intervall_list_laenge (struct intervall *list)
static void belege_intervalle (struct intervall **intervalle, struct intervall *liste)
static int intervall_nummer (const char *name)
static void test_zyklen (int startknoten)
static void berechne_intervall_endgueltig (int k)
void berechne_intervalle_absolut (struct intervall *list_of_intervalle)
void check_komplex_intervall (struct komplex_intervall *liste, const char *konstrukt_name)
void pascal _export KeyboardAnalyse (int box, int taste, char isLogic)
void pascal _export KeyboardAnalyseSimple (int box, int taste)
double GetReal (GisToken *token)
char GetMidiInstrument (GisToken *token)
int GetTheSpeedFactor (GisToken *token)
void GisReadDummy (GisReadHead *, char)
frac GisReadHeadOn (GisReadHead **Head, frac dTime, GisReadProceed *proceed)
TagListCopy (TagList *list)
void Erase (TagList *list)
TagListRemoveTag (TagList **list)
TagListAddTag (TagList **list, GisTag *tag)
TagListEndTag (TagList **list, GisTagEnd *tagEnd)
void GisReadArtDummy (GisReadArtHead *, char)
frac GisReadArtHeadOn (GisReadArtHead **Head, frac dTime, GisReadArtProceed *proceed)
char StrCmp (const char *s1, const char *s2)
int CmpNote (GisToken *note1, GisToken *note2)
GisWriteHeadGetMatchingHeader (GisWriteHead **head, const mutString id)
int GisWriteHeadGis (GisWriteHead **head, mutString id, GisToken *token, char turn)
void CloseAllSubs (GisWriteHead *head)
 IMPLEMENT_DYNAMIC_CLASS (InputDevDlg, InputDevDlgBase) BEGIN_EVENT_TABLE(InputDevDlg
InputDevDlgBase EVT_CHOICE (XRCID("DeviceChoice"), InputDevDlg::OnChoiceSelected) EVT_BUTTON(
wxString FileNameDialog (wxWindow *parent, int Command=CM_FILEOPEN, wxString Filename=wxEmptyString)
void PRINTWINDOW (wxWindow *window, const wxString &offset=_T(""))
ERouteEDevice::GetRoute (int nr)
 find a route to a given number
int EDevice::nRoutes ()
 return the number of routes.
void EDevice::AddRoute (ERoute *route)
 adds a route to the device
wxString EDevice::GetName ()
 return the name of the device
GisReadHeadGisReadHead::InsertInfrontOf (GisReadHead *position)
GisReadHeadGisReadHead::CutOut ()
void GisReadHead::CreateSegmentSubs ()
void GisReadHead::CreateSequenzSubs ()
void GisReadHead::Read ()
void GisReadArtHead::Read ()
 ChordNote::ChordNote (ChordNote *first)
void ChordNote::CountOnTime (frac dTime)
void ChordNote::SetNoteOn (GisToken *note)
int ChordNote::SetNoteOff (GisToken *note)
void ChordNote::AddGis (GisToken *token)
void ChordNote::CheckCloseAlter ()
void ChordNote::CheckCloseTie ()
int ChordNote::MutNoteOn (int key, double pitch, int instrId, int taste, mutString sep)
int ChordNote::MutNoteOff ()
GisWriteHeadGisWriteHead::InsertAfter (GisWriteHead *position)
GisWriteHeadGisWriteHead::CutOut ()
ChordNoteGisWriteHead::GetFreeNote ()
ChordNoteGisWriteHead::GetNote (int instrId, int taste)
int GisWriteHead::ReadyForBoss ()
void GisWriteHead::RemoveComma ()
int GisWriteHead::CloseSubs (GisToken **cont=0)
int GisWriteHead::CloseCurrentToken (char insertRest=1)
int GisWriteHead::ProceedGis (GisToken *token, char turn=0)
void GisWriteHead::WriteChord ()
void GisWriteHead::AddTime (frac dTime)

Variablen

EDeviceInEDevices = 0
 input devices for GUI
EDeviceOutEDevices = 0
 output devices for GUI
bool BoxUsed [MAX_BOX]
 which mutabor boxes are used at all?
static int anzahl_intervalle
static struct intervall ** intervalle
static charvisited
static charmatrix
char ArticulationHold [5] = { 80, 100, 90, 90, 60 }
char ArticulationOff [5] = { 80, 80, 60, 127, 127 }
bool LogicOn
wxHtmlHelpController * HelpController
wxMBConv * muConvAutoFallback = &wxConvISO8859_1
wxMBConv * muConvAutoFallback

Makro-Dokumentation

#define ABSTRACT_FUNCTION   STUBBASE("unreachable function","")

Definiert in Zeile 113 der Datei mhDefs.h.

#define ABSTRACT_FUNCTIONC   ABSTRACT_FUNCTIONCT(*this)
#define ABSTRACT_FUNCTIONCT (   type)    STUBBASE("unreachable function",((const char *) (typeid(type).name())))

Definiert in Zeile 114 der Datei mhDefs.h.

#define adjazent (   a,
 
)
Wert:
matrix [ (a) * anzahl_intervalle * sizeof (char) \
                             + (b) * sizeof (char)]

Definiert in Zeile 116 der Datei Interval.cpp.

Wird benutzt von berechne_intervalle_absolut() und test_zyklen().

#define DEF_MHARRAY (   T,
  name,
  baseType 
)
Wert:
class name                                                                                                                      \
{                                                                   \
public:                                                             \
    baseType data;                                                                                                      \
        name(int WXUNUSED(i), int WXUNUSED(j), int WXUNUSED(k)) {};                       \
        ~name() {};                                                     \
        size_t GetItemsInContainer() const { return data.GetCount(); }  \
        void Flush() { data.Clear(); }                                 \
    void Add(T t) { data.Add(t); }                                                                      \
    T& operator[](size_t uiIndex) const { return data[uiIndex]; }       \
        void Destroy(size_t uiIndex) { data.RemoveAt(uiIndex); }                \
        void AddAt(T t, size_t uiIndex) { data.Insert(t, uiIndex); }            \
        void RemoveEntry(size_t uiIndex) { data.RemoveAt(uiIndex); }    \
};                                                                                                                                      \

Definiert in Zeile 28 der Datei mhArray.h.

#define DEF_MHARRAYPTR (   T,
  name,
  baseType 
)
Wert:
class name                                                                                                                      \
{                                                                   \
public:                                                             \
    baseType data;                                                                                                      \
    name(int WXUNUSED(i), int WXUNUSED(j), int WXUNUSED(k)) {};                       \
        ~name() {};                                                     \
    size_t GetItemsInContainer() const { return data.GetCount(); }  \
    void Add(T t) { data.Add(new T(t)); }                                       \
        void Flush() { data.Clear(); }                                  \
        void RemoveEntry(size_t i) { data.RemoveAt(i); }                                        \
    T& operator[](size_t uiIndex) const { return *(data[uiIndex]); }\
        void Destroy(size_t uiIndex) { /*delete data[uiIndex];*/ data.RemoveAt(uiIndex); }              \
        void AddAt(T t, size_t uiIndex) { data.Insert(new T(t), uiIndex); }             \
};                                                                                                                                      \

Definiert in Zeile 46 der Datei mhArray.h.

#define DEF_STACK (   T,
  name,
  baseType 
)
Wert:
class name                                                                                                                      \
{                                                                   \
public:                                                             \
        baseType data;                                                                                          \
    name() {};                       \
    name(int WXUNUSED(i), int WXUNUSED(j), int WXUNUSED(k)) {};                       \
        ~name() {};                                                                                                             \
        void Push(T t) { data.Add(t); }                                                                 \
        T Pop() { T h = data.Last(); data.RemoveAt(data.GetCount()-1); return h; } \
        bool IsEmpty() const { return data.GetCount() == 0; }                   \
        T Top() const { return data.Last(); }                                                   \
};                                                                                                                                      \

Definiert in Zeile 62 der Datei mhArray.h.

#define DRUMCHANNEL   9
#define GET_ABSTAND (   taste,
  tonsystem 
)
Wert:
( (int)((taste)-( (tonsystem)->anker % (tonsystem)->breite ))  \
           / (tonsystem)->breite -((int) (tonsystem)->anker         \
           / (tonsystem)->breite ))

Definiert in Zeile 57 der Datei MidiKern.h.

#define GET_FREQ (   taste,
  tonsystem 
)
Wert:
( ( (tonsystem)->ton[GET_INDEX(taste,(tonsystem))]==0) ?       \
          (long) 0 :                                       \
     (long)( (tonsystem)->periode *                   \
              GET_ABSTAND(taste,(tonsystem))  +                         \
                   (tonsystem)->ton[GET_INDEX(taste,(tonsystem))]))

Definiert in Zeile 63 der Datei MidiKern.h.

Wird benutzt von change_anker(), change_breite(), protokoll_liegende_frequenzen() und protokoll_liegende_relationen().

#define GET_INDEX (   taste,
  tonsystem 
)
Wert:
((int)((taste)-( (tonsystem)->anker % (tonsystem)->breite )) \
                          % (tonsystem)->breite )

Definiert in Zeile 51 der Datei MidiKern.h.

Wird benutzt von AddKey(), DeleteKey(), HarmonyAnalysis() und update_pattern().

#define GETLINE
Wert:
if ( !GetELine(&p1, s) ) \
    return

Definiert in Zeile 636 der Datei EDevice.cpp.

Wird benutzt von ScanRoutes().

#define ICON (   s)    wxIcon( s##_xpm )

Definiert in Zeile 49 der Datei mhDefs.h.

Wird benutzt von MutFrame::CmRoutes() und MutRouteWnd::MutRouteWnd().

#define LONG_TO_CENT (   x)    ( ((float)x)/(double)167772.13 )
#define LONG_TO_HERTZ (   x)    (440.0*pow(ZWZ,((((float)x)/(double)16777216.0))-69))

Definiert in Zeile 71 der Datei MidiKern.h.

Wird benutzt von protokoll_aktuelles_tonsystem() und protokoll_liegende_frequenzen().

#define MDI_FORCE_EXTERN

Definiert in Zeile 123 der Datei mhDefs.h.

#define muT (   x)    x
#define NOTE   ((GisNote*)note)

Definiert in Zeile 817 der Datei GIS_Head.cpp.

Wird benutzt von ChordNote::SetNoteOn().

#define NOTE1   ((GisNote*)note1)

Definiert in Zeile 732 der Datei GIS_Head.cpp.

Wird benutzt von CmpNote().

#define NOTE2   ((GisNote*)note2)

Definiert in Zeile 733 der Datei GIS_Head.cpp.

Wird benutzt von CmpNote().

#define REUSE (   type)    type

Definiert in Zeile 42 der Datei mhDefs.h.

#define SSCANF   sscanf

Definiert in Zeile 56 der Datei mhDefs.h.

Wird benutzt von compat30::LoadRoutes().

#define STUB   STUBBASE("stub function","")

functions or code that has to be written -- simple function

Definiert in Zeile 103 der Datei mhDefs.h.

Wird benutzt von compat30::SaveRoutes().

#define STUBBASE (   stubtype,
  typestr 
)
Wert:
do { \
        std::cerr << stubtype << " in " ; \
        std::cerr << __FILE__ << ":" << __LINE__ << ": " ;\
        std::cerr << typestr << "::" ;\
        std::cerr << __WXFUNCTION__ << std::endl;\
        wxFAIL_MSG(wxString::Format(_T("\n\n%s\n\nin %s:%d:\n\n%s::%s\n\n"), \
                                    muT(stubtype).c_str(), \
                                    _T(__FILE__), \
                                    __LINE__, \
                                    muT(typestr).c_str(), \
                                    muT(__WXFUNCTION__).c_str())); \
} while (0)

Definiert in Zeile 88 der Datei mhDefs.h.

#define STUBC   STUBCT(*this)
#define STUBCT (   type)    STUBBASE("stub function",((const char *) (typeid(type).name())))

functions or code that has to be written -- use for static class members

Definiert in Zeile 105 der Datei mhDefs.h.

#define TAG   ((GisTag*)Cursor)

Definiert in Zeile 500 der Datei GIS_Head.cpp.

Wird benutzt von GisReadArtHead::Read().

#define TAGEND   ((GisTagEnd*)Cursor)

Definiert in Zeile 501 der Datei GIS_Head.cpp.

Wird benutzt von GisReadArtHead::Read().

#define UNREACHABLE   STUBBASE("unreachable code","")

Definiert in Zeile 109 der Datei mhDefs.h.

Wird benutzt von CheckBoxesUsed(), compat30::LoadRoutes() und compat30::SaveRoutes().

#define UNREACHABLEC   UNREACHABLECT(*this)
#define UNREACHABLECT (   type)    STUBBASE("unreachable code",((const char *) (typeid(type).name())))

Definiert in Zeile 110 der Datei mhDefs.h.

Wird benutzt von MutBoxChannelShape::CreateRoutePanel().

#define WTAG   ((GisTag*)(*Cursor))

Definiert in Zeile 1232 der Datei GIS_Head.cpp.

Wird benutzt von GisWriteHead::ProceedGis().

#define WTAGEND   ((GisTagEnd*)token)

Definiert in Zeile 1233 der Datei GIS_Head.cpp.

Wird benutzt von GisWriteHead::ProceedGis().

#define xz   5

Definiert in Zeile 31 der Datei MutRouteWnd.h.

Wird benutzt von MutRouteWnd::OnDraw() und PrintBox().

#define yz   5

Definiert in Zeile 32 der Datei MutRouteWnd.h.

Wird benutzt von MutRouteWnd::OnDraw().

#define ZIFFER   (mutT('0') <= t[i] && t[i] <= mutT('9'))

Definiert in Zeile 88 der Datei GIS_Head.cpp.

Wird benutzt von GetTheSpeedFactor().

#define ZWZ   1.059463094

Definiert in Zeile 70 der Datei MidiKern.h.


Dokumentation der benutzerdefinierten Typen

typedef wxMBConv muConvAuto

Definiert in Zeile 167 der Datei muconvauto.h.


Dokumentation der Funktionen

void ChordNote::AddGis ( GisToken token)
void EDevice::AddRoute ( ERoute route)

adds a route to the device

Parameter:
routeroute to be added;

Definiert in Zeile 65 der Datei EDevice.cpp.

Benutzt ERoute::Next und EDevice::Routes.

Wird benutzt von NewDevice() und ScanRoutes().

{
        ERoute **R = &Routes;
        while ( *R )
                R = &(*R)->Next;
        *R = route;
}
TagList* AddTag ( TagList **  list,
GisTag tag 
)

Definiert in Zeile 467 der Datei GIS_Head.cpp.

Benutzt GTTag, TagListData::Next, RemoveTag(), TagListData::Tag und GisTag::Type().

Wird benutzt von GisWriteHead::ProceedGis() und GisReadArtHead::Read().

{
        if ( *list && (*list)->Tag->Type() == GTTag && tag->Type() == GTTag )
                RemoveTag(list);

        TagList *TopTag = new TagList;

        TopTag->Next = *list;

        TopTag->Tag = tag;

        *list = TopTag;

        return *list;
}
void GisWriteHead::AddTime ( frac  dTime)
static void belege_intervalle ( struct intervall **  intervalle,
struct intervall liste 
) [static]

Definiert in Zeile 128 der Datei Interval.cpp.

Benutzt intervall::next.

Wird benutzt von berechne_intervalle_absolut().

{
        while (liste)
        {
                *intervalle = liste;
                intervalle++;
                liste = liste->next;
        }
}
static void berechne_intervall_endgueltig ( int  k) [static]

Definiert in Zeile 169 der Datei Interval.cpp.

Benutzt _(), fatal_error(), get_wert_komplex_intervall(), intervall::intervall_absolut, intervall_absolut, intervall::intervall_komplex, intervall_komplex, intervall_nummer(), intervall::intervall_typ, name, komplex_intervall::next und intervall::u.

Wird benutzt von berechne_intervalle_absolut().

{
        int b;
        double help;

        switch (intervalle[k]->intervall_typ) {

        case intervall_absolut:         /* hier nichts zu tun */
                break;

        case intervall_komplex: {

                struct komplex_intervall * lauf;

                for (lauf = intervalle[k]->u.intervall_komplex.komplex_liste;
                                lauf;
                                lauf = lauf -> next) {
                        b = intervall_nummer (lauf -> name);
                        berechne_intervall_endgueltig (b);
                }

                help = get_wert_komplex_intervall (intervalle[k]->u.intervall_komplex.komplex_liste);

                intervalle[k]->intervall_typ = intervall_absolut;
                intervalle[k]->u.intervall_absolut.intervall_wert = help;
        }

        break;

        default:
                fatal_error(0,_C_STR(_("loop")));
        }
}
void berechne_intervalle_absolut ( struct intervall list_of_intervalle)

Definiert in Zeile 203 der Datei Interval.cpp.

Benutzt _(), adjazent, anzahl_intervalle, belege_intervalle(), berechne_intervall_endgueltig(), fatal_error(), intervall_absolut, intervall::intervall_komplex, intervall_komplex, intervall_list_laenge(), intervall_nummer(), matrix, name, komplex_intervall::next, test_zyklen(), visited, xalloca() und xde_alloca().

Wird benutzt von mutabor_programm_einlesen().

{
        int i,j,k;

        anzahl_intervalle = intervall_list_laenge (list_of_intervalle);

        intervalle = (intervall* *) xalloca (sizeof(struct intervall *) * anzahl_intervalle);
        visited = (char*) xalloca (sizeof(char) * anzahl_intervalle);
        matrix = (char*) xalloca (sizeof(char) * anzahl_intervalle * anzahl_intervalle);


        /* Feld mit intervallen initialisieren (zum schnelleren Zugriff) */

        belege_intervalle (intervalle, list_of_intervalle);

        /* Adjazenzmatrix initialisieren (Kein Intervall hängt vom anderen ab) */

        for (i=0; i<anzahl_intervalle; i++)
        {
                for (j=0; j<anzahl_intervalle; j++) {
                        adjazent (i,j) = 0;
                }
        }

        /* Adjazenzmatrix initialisieren (Abhängigkeiten eintragen) */

        for (i=0; i<anzahl_intervalle; i++)
        {
                if (intervalle[i]->intervall_typ == intervall_absolut)  /* alles ok */ ;
                else if (intervalle[i]->intervall_typ == intervall_komplex) {

                        struct komplex_intervall * lauf;

                        for (lauf = intervalle[i]->u.intervall_komplex.komplex_liste;
                                        lauf;
                                        lauf = lauf -> next) {
                                adjazent (i, intervall_nummer (lauf -> name)) = 1;
                        }
                } else {
                        fatal_error(0,_C_STR(_("loop")));
                }
        }

#ifdef DEBUG_ANZEIGE_3
        /* Adjazenzmatrix anzeigen */

        printf ("Matrix:\n");

        for (i=0; i<anzahl_intervalle; i++)
        {
                printf ("%s -> ", intervalle[i]->name);

                for (j=0; j<anzahl_intervalle; j++) {
                        if (adjazent (i,j))
                                printf ("%s  ", intervalle[j]->name);
                }

                printf ("\n");
        }

        printf ("\n");

#endif

        /* auf Zyklenfreiheit Pruefen */

        for (k=0; k<anzahl_intervalle; k++)
                visited [k] = 0;

        for (k=0; k<anzahl_intervalle; k++)
        {
                visited [k] = 1;
                test_zyklen (k);
                visited [k] = 0;
        }

        /* Toene endgueltig berechnen */

        for (k=0; k<anzahl_intervalle; k++)
                berechne_intervall_endgueltig (k);

#ifdef DEBUG_ANZEIGE_3
        /* Adjazenzmatrix anzeigen */

        printf ("Matrix:\n");

        for (i=0; i<anzahl_intervalle; i++)
        {
                printf ("%s -> ", intervalle[i]->name);

                for (j=0; j<anzahl_intervalle; j++) {
                        if (adjazent (i,j))
                                printf ("%s  ", intervalle[j]->name);
                }

                printf ("\n");
        }

        printf ("\n");

#endif

        xde_alloca (intervalle);
        xde_alloca (visited);
        xde_alloca (matrix);

}
void ChangeOutReferences ( EDevice from,
EDevice to 
)

Definiert in Zeile 83 der Datei EDevice.cpp.

Benutzt ERoute::Next und EDevice::Next.

Wird benutzt von NewDevice().

{
        for (EDevice *In = InEDevices; In; In = In->Next)
                for (ERoute *R = In->Routes; R; R = R->Next)
                        if ( R->Out == from )
                                R->Out = to;
}
void check_komplex_intervall ( struct komplex_intervall liste,
const char konstrukt_name 
)

Definiert in Zeile 314 der Datei Interval.cpp.

Benutzt fatal_error(), get_intervall(), intervall_absolut, list_of_intervalle, mutC_STR, name und komplex_intervall::next.

Wird benutzt von check_konsistenz().

{
        for ( ; liste ; liste = liste -> next )
        {

                struct intervall * help = get_intervall (liste -> name, list_of_intervalle);

                if (help == NULL) {
                        fatal_error (32, mutC_STR(liste -> name), mutC_STR(konstrukt_name));
                        return;
                }

                if (help -> intervall_typ != intervall_absolut) {
                        fatal_error (0, _T(__FILE__), __LINE__);
                        return;
                }
        }
}
void CheckBoxesUsed ( )

synchronizes BoxUsed with the routes

Definiert in Zeile 1167 der Datei EDevice.cpp.

Wird benutzt von MutFrame::CmDoActivate().

{
        for (int i = 0; i < MAX_BOX; i++)
                BoxUsed[i] = false;

        for (EDevice *In = InEDevices; In; In = In->Next)
                for (ERoute *R = In->Routes; R; R = R->Next)
                        if ( R->Box >= 0 )
                                BoxUsed[R->Box] = true;
}
void ChordNote::CheckCloseAlter ( )

Definiert in Zeile 852 der Datei GIS_Head.cpp.

Benutzt ChordNote::AddGis(), ChordNote::AlterBegin, CNAlter, ChordNote::LastSep, mutEmptyString, mutString, ChordNote::Pitch, Sep und ChordNote::Status.

Wird benutzt von ChordNote::CheckClose(), ChordNote::CheckCloseTie() und ChordNote::MutNoteOn().

{
        if ( Status & CNAlter ) {
                mutString s = mutEmptyString;
                mutString *Sep = LastSep;

                if ( !LastSep ) Sep = &s;

                AddGis(new GisTagEnd((GisTagBegin*)*AlterBegin, *Sep));

#ifdef WX
                if ( Sep->size() ) {
                        *Sep = wxEmptyString;
                }

#else
                if ( *Sep.length() ) {
                        free(*Sep);
                        *Sep = 0;
                }

#endif
                Status -= CNAlter;

                Pitch = 0;
        }
}
void ChordNote::CheckCloseTie ( )

Definiert in Zeile 880 der Datei GIS_Head.cpp.

Benutzt ChordNote::AddGis(), ChordNote::CheckCloseAlter(), ChordNote::Cursor, ChordNote::LastSep, mutEmptyString, mutString, mutT, ChordNote::nTie, Sep, ChordNote::TieBegin und TTtie.

Wird benutzt von ChordNote::CheckClose().

{
        if ( nTie > 1 ) {
                // close alter
                CheckCloseAlter();
                // insert begin range
                *TieBegin = new GisTagBegin(TTtie, 0, 0, mutT("("), *TieBegin);
                // add end range
                mutString s = mutEmptyString;
                mutString *Sep = LastSep;

                if ( !LastSep ) Sep = &s;

                AddGis(new GisTagEnd((GisTagBegin*)*TieBegin, *Sep));

#ifdef WX
                if ( Sep->size() ) {
                        *Sep=mutEmptyString;
                }

#else
                if ( *Sep ) {
                        free(*Sep);
                        *Sep = 0;
                }

#endif
        }

        TieBegin = Cursor;

        nTie = 0;
}
ChordNote::ChordNote ( ChordNote first)
void CloseAllSubs ( GisWriteHead head)

Definiert in Zeile 1489 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::CloseSubs(), GisWriteHead::CommaAtEnd, GisWriteHead::Cursor, GisWriteHead::CutOut(), GisWriteHead::Data, GetGisType(), GTSegment, mutT, GisWriteHead::Next, GisWriteHead::nSub und GisWriteHead::RemoveComma().

Wird benutzt von OutGis::Close().

{
        while ( 1 ) {
                // search the lowest boss
                GisWriteHead *Boss = 0;

                for (GisWriteHead *H = head; H; H = H->Next)
                        if ( H->nSub > 0 )
                                Boss = H;

                if ( !Boss ) break;

                // check for "empty" boss
                if ( !Boss->Data && Boss->nSub == 1 ) {
                        GisWriteHead *h = Boss->Next;
                        Boss->Data = h->Data;
                        Boss->nSub = 0;
                        h->Data = 0;
                        h->CutOut();
                        delete h;
                        continue;
                }

                // check for segment
                if ( GetGisType(*Boss->Cursor) != GTSegment ) {
                        if ( Boss->Data && !Boss->CommaAtEnd ) {
                                *Boss->Cursor = new GisComma(mutT(" "), 0);
                                Boss->Cursor = &((*Boss->Cursor)->Next);
                        }

                        Boss->Data = new GisSegment(Boss->Data, mutT(" "), 0);

                        GisToken **Cont = Boss->Cursor;

                        if ( Boss->Cursor == &Boss->Data )
                                Cont = 0;

                        Boss->Cursor = &Boss->Data;

                        Boss->CloseSubs(Cont);
                } else
                        Boss->CloseSubs();
        }

        /*  // check wether there are parallel heads
          if ( head->Next ) */
        // remove comma at end
        head->RemoveComma();
}
int GisWriteHead::CloseCurrentToken ( char  insertRest = 1)

Definiert in Zeile 1164 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::ChordNotes, GisWriteHead::CloseSubs(), GisWriteHead::CurrentTime, GisWriteHead::Cursor, GTNull, GTParaInt, GTParaReal, GTParaStr, GTSegment, GTSequenz, GTTag, GTTagBegin, GTTagEnd, GTUnknown, mutT, GisWriteHead::State() und GisWriteHead::WriteChord().

Wird benutzt von GisWriteHead::ProceedGis() und GisWriteHead::ReadyForBoss().

{
        if ( ChordNotes ) {
                WriteChord();
                return 0;
        }

        switch ( State() ) {

        case GTNull:
                if ( insertRest && CurrentTime ) // write a rest
                {
                        *Cursor = new GisNote(mutT("_"), mutT(""), 0, CurrentTime, mutT(" "));
                        Cursor = &((*Cursor)->Next);
                        CurrentTime = 0;
                }
                break;

        case GTUnknown:
                return 1; // impossible

        case GTSequenz:
                CloseSubs();

                CurrentTime = 0;

                Cursor = &((*Cursor)->Next);

                break;

        case GTSegment:
                CloseSubs();

                CurrentTime = 0;

                Cursor = &((*Cursor)->Next);

                break;

        case GTTag:
                return 1; // impossible

        case GTTagBegin:
                return 1; // impossible

        case GTTagEnd:
                return 1; // impossible

                /*    case GTNote:
                                ((GisNote*)(*Cursor))->Duration = CurrentTime;
                                Cursor = &(*Cursor)->Next;
                                CurrentTime = frac(0, 1);
                                // das hier muß anders sein, um mehrere Noten gleichzeitig zu schaffen
                                break;  */

        case GTParaInt:
                return 1; // impossible

        case GTParaReal:
                return 1; // impossible

        case GTParaStr:
                return 1; // impossible
        }

        return 0;
}
int GisWriteHead::CloseSubs ( GisToken **  cont = 0)

Definiert in Zeile 1130 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::Boss, GisWriteHead::CommaAtEnd, GisWriteHead::Cursor, GisWriteHead::CutOut(), GisWriteHead::Data, mutT, GisWriteHead::Next, GisWriteHead::nSub, GisWriteHead::ReadyForBoss() und GisWriteHead::RemoveComma().

Wird benutzt von CloseAllSubs() und GisWriteHead::CloseCurrentToken().

{
        GisWriteHead *h = Next;
        GisToken **Cont = &(((GisSegment*)*Cursor)->Contents);

        if ( cont ) Cont = cont;

        while ( h && nSub > 0 && h->Boss == this ) {
                h->ReadyForBoss();

                if ( nSub == 1 && h->CommaAtEnd )
                        h->RemoveComma();

                *Cont = h->Data;

                if ( Data )
                        Cont = h->Cursor;

                if ( nSub > 1 && !h->CommaAtEnd ) {
                        *Cont = new GisComma(mutT(" "), 0);
                        Cont = &((*Cont)->Next);
                }

                nSub--;

                h->CutOut();
                delete h;
                h = Next;
        }

        return nSub;
}
int CmpNote ( GisToken note1,
GisToken note2 
)

Definiert in Zeile 757 der Datei GIS_Head.cpp.

Benutzt GTNote, NOTE1, NOTE2, StrCmp() und GisToken::Type().

Wird benutzt von ChordNote::SetNoteOff().

{
        if ( note1->Type() != GTNote || note2->Type() != GTNote )
                return 0;

        if ( StrCmp(NOTE1->Name, NOTE2->Name)
                        || StrCmp(NOTE1->Accedentials, NOTE2->Accedentials)
                        || NOTE1->Octave != NOTE2->Octave )
                return 0;

        return 1;

}
TagList* Copy ( TagList list)

Definiert in Zeile 432 der Datei GIS_Head.cpp.

Benutzt TagListData::Data, TagListData::Next und TagListData::Tag.

Wird benutzt von GisReadArtHead::GisReadArtHead().

{
        if ( !list ) return 0;

        TagList *List = new TagList;

        List->Next = 0;

        List->Tag = list->Tag;

        List->Data = list->Data;

        return List;
}
void ChordNote::CountOnTime ( frac  dTime)
void GisReadHead::CreateSegmentSubs ( )

Definiert in Zeile 252 der Datei GIS_Head.cpp.

Benutzt GisReadHead::Build(), GisSegment::Contents, GisReadHead::Cursor, DEBUGLOG, GTComma, GisReadHead::Id, mutString, mutT, GisToken::Next, GisReadHead::nSub und GisToken::Type().

Wird benutzt von GisReadArtHead::Read() und GisReadHead::Read().

{
        GisSegment *Seg = (GisSegment*)Cursor;
        GisToken *Cont = Seg->Contents;
#ifdef WX
        mutString id = Id + mutT("*");
#else
        char *id = (char*)malloc(strlen(Id)+2);
        strcpy(id, Id);
        strcat(id, "*");
#endif
        nSub = 0;

        while ( Cont ) // create the single token subs
        {
                nSub++;
                id[mutLen(Id)] = nSub;
                DEBUGLOG (other, _T("Creating Sub for %p (%d, %s)"),Cont,nSub,id.c_str());

                GisReadHead *Sub = Build(this, Cont, id, 1);
                Cont = Cont->Next;

                while ( Cont ) // read until end or comma
                {

                        if ( Cont->Type() == GTComma )
                        {
                                Cont = Cont->Next;
                                break;
                        }

                        Cont = Cont->Next;
                }
        }
}
void GisReadHead::CreateSequenzSubs ( )

Definiert in Zeile 289 der Datei GIS_Head.cpp.

Benutzt GisReadHead::Build(), GisSegment::Contents, GisReadHead::Cursor, GisReadHead::Id, mutString, mutT und GisReadHead::nSub.

Wird benutzt von GisReadArtHead::Read() und GisReadHead::Read().

{
        GisSegment *Seq = (GisSegment*)Cursor;
#ifdef WX
        mutString id = Id + mutT("\x01");
#else
        char *id = (char*)malloc(strlen(Id)+2);
        strcpy(id, Id);
        strcat(id, "\x01");
#endif
        nSub = 1;
        GisReadHead *Sub = Build(this, Seq->Contents, id);
}
GisWriteHead * GisWriteHead::CutOut ( )

Definiert in Zeile 1002 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::Next und GisWriteHead::Prev.

Wird benutzt von CloseAllSubs() und GisWriteHead::CloseSubs().

{
        if ( *(GisWriteHead**)Prev == this ) // first of list
        {
                *(GisWriteHead**)Prev = Next;
        } else // normal list postition
        {
                Prev->Next = Next;
        }

        if ( Next ) Next->Prev = Prev;

        Next = 0;

        Prev = 0;

        return this;
}
GisReadHead * GisReadHead::CutOut ( )

Definiert in Zeile 203 der Datei GIS_Head.cpp.

Benutzt GisReadHead::Next, GisReadHead::Prev und GisReadHead::PrevPtr.

Wird benutzt von GisReadArtHeadOn(), GisReadHeadOn() und InGis::ReadOn().

{
#if 0

        if ( *(PrevPtr) == this ) // first of list
        {
                *PrevPtr = Next;
        } else // normal list postition
        {
                (*PrevPtr)->Next = Next;
        }

        if ( Next ) Next->PrevPtr = PrevPtr;

        Next = NULL;

        PrevPtr = &Prev;

        return this;

#else
        if ( *(PrevPtr) == this ) // first of list
        {
                *PrevPtr = Next;

                if (Next) {
                        Next->PrevPtr = PrevPtr;
                        Next->Prev = NULL;
                }
        }
        else // normal list postition
        {
                Prev->Next = Next;

                if (Next) {
                        Next->Prev = Prev;
                        wxASSERT(Next->PrevPtr == &(Next->Prev));
                }
        }

        Next = NULL;

        PrevPtr = &Prev;
        Prev = NULL;
        return this;
#endif
}
TagList* EndTag ( TagList **  list,
GisTagEnd tagEnd 
)

Definiert in Zeile 483 der Datei GIS_Head.cpp.

Benutzt GisTagEnd::Begin, GTTag, if(), TagListData::Next, RemoveTag(), TagListData::Tag und GisTag::Type().

Wird benutzt von GisWriteHead::ProceedGis() und GisReadArtHead::Read().

{
        TagList *Pos = *list;

        if ( Pos && Pos->Tag->Type() == GTTag )
                Pos = Pos->Next;

        if ( Pos && tagEnd->Begin == Pos->Tag ) {
                if ( Pos != *list )
                        RemoveTag(list);

                RemoveTag(list);
        }

        return *list;
}
void Erase ( TagList list)

Definiert in Zeile 447 der Datei GIS_Head.cpp.

Benutzt TagListData::Next.

Wird benutzt von GisReadArtHead::~GisReadArtHead() und GisWriteHead::~GisWriteHead().

{
        while ( list ) {
                TagList *TopTag = list;
                list = TopTag->Next;
                delete TopTag;
        }
}
InputDevDlgBase EVT_CHOICE ( XRCID("DeviceChoice")  ,
InputDevDlg::OnChoiceSelected   
)

InputDevDlg constructors

Definiert in Zeile 46 der Datei InputDevDlg.cpp.

Benutzt _(), DEBUGLOG, DTGis, DTMidiFile und DTMidiPort.

                                         :InputDevDlgBase(parent)
{
        DeviceChoice->Clear();
        DeviceChoice->Append(_("MIDI Device"),new TypeData(DTMidiPort));
        DeviceChoice->Append(_("MIDI file"),new TypeData(DTMidiFile));
        DeviceChoice->Append(_("GUIDO file"),new TypeData(DTGis));

        TypeBox = DeviceChoice->GetContainingSizer();
        PortBox = PortChoice->GetContainingSizer();
        MidiFileBox = MidiFilePicker->GetContainingSizer();
        DEBUGLOG (other,_T ("MidiFilePicker Growable: %d"), MidiFilePicker->IsPickerCtrlGrowable());
        if (MidiFilePicker->HasTextCtrl()) {
                DEBUGLOG (other,_T ("MidiFileTextCtrl Growable: %d"), 
                          MidiFilePicker->IsTextCtrlGrowable());
                MidiFilePicker->SetTextCtrlGrowable(true);
                DEBUGLOG (other,_T ("MidiFileTextCtrl Growable: %d"), 
                          MidiFilePicker->IsTextCtrlGrowable());
        }
        GuidoFileBox = GuidoFilePicker->GetContainingSizer();

//      GetSizer()->Fit(this);
//      GetSizer()->SetSizeHints(this);
//      Centre();
}
wxString FileNameDialog ( wxWindow *  parent,
int  Command = CM_FILEOPEN,
wxString  Filename = wxEmptyString 
)

Definiert in Zeile 36 der Datei mxDefs.cpp.

Benutzt _(), CM_EXECUTE, CM_FILEOPEN, CM_FILESAVEAS, CM_ROUTELOAD, CM_ROUTESAVE, CM_ROUTESAVEAS und name.

Wird benutzt von MutFrame::CmFileOpen(), MutApp::CmFileOpen(), MutRouteWnd::CmRouteLoad() und MutRouteWnd::CmRouteSaveAs().

{
#ifdef DEBUG
        std::cout << "FileNameDialog: " << Command << std::endl;
#endif

        static const wxString logic_sources(_("Mutabor tuning file (*.mut)|*.mut|Old Mutabor tuning file (*.mus)|*.mus|All files (*.*)|*.*"));

        static const wxString route_sources(_("Mutabor routing file (*.mur)|*.mur|All files (*.*)|*.*"));

        wxString title, filetypes,
        dir(wxEmptyString), name(wxEmptyString) , ext(wxEmptyString);

        int flags;

        switch (Command) {

        case CM_FILEOPEN:
                title = _("Which Mutabor file shall be loaded?");

                filetypes = logic_sources;

                flags = wxFD_CHANGE_DIR | wxFD_FILE_MUST_EXIST | wxFD_OPEN;

                break;

        case CM_EXECUTE:
                title = _("Which Mutabor file shall be executed?");

                filetypes = logic_sources;

                flags = wxFD_CHANGE_DIR | wxFD_FILE_MUST_EXIST | wxFD_OPEN;

                break;

        case CM_FILESAVEAS:
                title = _("Enter the new Mutabor file name, please!");

                filetypes = logic_sources;

                flags = wxFD_CHANGE_DIR | wxFD_OVERWRITE_PROMPT | wxFD_SAVE;

                break;

        case CM_ROUTELOAD:
                title = _("Which Mutabor route file shall be loaded?");

                filetypes = route_sources;

                flags = wxFD_CHANGE_DIR | wxFD_FILE_MUST_EXIST | wxFD_OPEN;

                break;

        case CM_ROUTESAVE:

        case CM_ROUTESAVEAS:
                title = _("Enter the new Mutabor route file name, please!");

                filetypes = route_sources;

                flags = wxFD_CHANGE_DIR | wxFD_OVERWRITE_PROMPT | wxFD_SAVE;

                break;

        default:
                wxLogError(_("Unexpected Command Id in FileNameDialog: %d"),Command);

                return wxString(_T(""));
        }

        if (!Filename.IsEmpty()) {
                wxFileName splitter(Filename);
                ext = splitter.GetExt();
                name = splitter.GetFullName();
                dir = splitter.GetPath();
        }

        wxFileDialog  * FileSelector = new wxFileDialog(parent, title, dir, name, filetypes,

#ifdef __WXCOCOA__
                                       0
#else
                                       flags
#endif
                                       //       ,parent
                                                       );

        int cmd = FileSelector->ShowModal();

        wxString retval;
        retval = (cmd == wxID_OK) ? (FileSelector->GetPath()) : wxString(wxEmptyString);

        FileSelector->Destroy();

        return retval;
}
static double get_intervall_wert ( const char name) [static]

Definiert in Zeile 38 der Datei Interval.cpp.

Benutzt fatal_error(), intervall::intervall_absolut, intervall_absolut, intervall_komplex, list_of_intervalle, mutC_STR, intervall::name, intervall::next und intervall::u.

Wird benutzt von get_wert_komplex_intervall().

{

        struct intervall *lauf;

        for (lauf = list_of_intervalle; lauf; lauf = lauf -> next) {
                if ( ! strcmp (name, lauf->name)) {
                        switch (lauf -> intervall_typ) {

                        default: /* und */

                        case intervall_komplex:
                                fatal_error (0, mutC_STR(__FILE__), __LINE__);

                                break;

                        case intervall_absolut:
                                return lauf->u.intervall_absolut.intervall_wert ;

                                /* break; */
                        }
                }
        }

        fatal_error(26,mutC_STR(name)); /* Intrvall n.dekl. */

        return 0.0; /* to prevent warnings */
}
double get_wert_komplex_intervall ( struct komplex_intervall intervall)

Definiert in Zeile 68 der Datei Interval.cpp.

Benutzt fatal_error(), get_intervall_wert(), mutC_STR, name und intervall::next.

Wird benutzt von berechne_intervall_endgueltig(), berechne_ton_endgueltig(), expandiere_tonsystem() und expandiere_umstimmung().

{
        double ret = 1.0;

        for ( ; intervall ; intervall = intervall -> next )
        {
                double help = get_intervall_wert (intervall -> name);

                if (help > 0)
                        ret *= pow (help, intervall -> faktor);
                else {
                        fatal_error(46, mutC_STR(intervall -> name));
                        /* unzul. Intervallwert */
                }

        }

        return ret;
}
char GetELine ( char **  p,
char s 
)

Definiert in Zeile 597 der Datei EDevice.cpp.

{

start:

        if ( !p || !(*p)[0] )
                return 0;

        while ( (*p)[0] == ' ' || (*p)[0] == '\n' || (*p)[0] == '\r' )
                *p = &(*p)[1];

        if ( !(*p)[0] )
                return 0;

        char *p1 = *p;

        *p = strchr(p1, '\n');

        if ( !p )
                *p = &p1[strlen(p1)];

        while ( *p1 && strchr("\n\r\t ", *p1) )
                p1 = &p1[1];

        int i = (*p)-p1;

        strncpy(s, p1, i);

        s[i] = 0;

        while ( i > 0 && strchr("\n\r\t ", s[i-1]) )
                s[--i] = 0;

        if ( !s[0] || s[0] == '#' )
                goto start;

        return 1;
}
EDevice* GetEOut ( int  nr)

Definiert in Zeile 251 der Datei EDevice.cpp.

Benutzt EDevice::Next und OutEDevices.

Wird benutzt von ScanRoutes().

{
        if ( nr < 0 )
                return 0;

        EDevice *Out = OutEDevices;
        while ( Out && nr ) {
                Out = Out->Next;
                nr--;
                    }
        return Out;
}
ChordNote * GisWriteHead::GetFreeNote ( )

Definiert in Zeile 1022 der Datei GIS_Head.cpp.

Benutzt ChordNote::AddGis(), GisWriteHead::ChordNotes, CNNoteOn, mutEmptyString, mutT und ChordNote::Next.

Wird benutzt von GisWriteHead::ProceedGis().

{
        if ( !ChordNotes )
                return ChordNotes = new ChordNote(this);

        ChordNote **ANote = &ChordNotes;

        while ( *ANote ) {
                if ( !((*ANote)->Status & CNNoteOn) ) {
                        if ( (*ANote)->CurrentTime )
                                (*ANote)->AddGis(new GisNote(mutT("_"), mutEmptyString, 0, (*ANote)->CurrentTime, mutT(" "), 0));

                        return *ANote;
                }

                ANote = &(*ANote)->Next;
        }

        *ANote = new ChordNote(ChordNotes);

        return *ANote;
}
GisWriteHead* GetMatchingHeader ( GisWriteHead **  head,
const mutString  id 
)

Definiert in Zeile 1425 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::Id, GisWriteHead::InsertAfter(), mutStrCmp, GisWriteHead::Next und GisWriteHead::Prev.

Wird benutzt von GisWriteHeadGis().

{
        GisWriteHead *h = *head, *LastHead = 0;
        GisWriteHead *Boss = h;
        size_t  BossIdLength = mutLen(h->Id);
        char CmpRes = 0;
        // search header

        while ( h ) {

#ifdef WX

                if ( (id.StartsWith(h->Id)) && (mutLen(h->Id) >= BossIdLength) ) {
                        Boss = h;
                        BossIdLength = mutLen(h->Id) + 1;
                }

                CmpRes = mutStrCmp(h->Id, id);

                if ( CmpRes >= 0 ) break;

#else
                if ( !strncmp(h->Id, id, strlen(h->Id)) && (strlen(h->Id) >= BossIdLength) ) {
                        Boss = h;
                        BossIdLength = strlen(h->Id) + 1;
                }

                CmpRes = strcmp(h->Id, id);

                if ( CmpRes >= 0 ) break;

#endif
                LastHead = h;

                h = h->Next;
        }

        if ( CmpRes ) // insert a new header
        {
                h = new GisWriteHead(Boss, id);

                if ( LastHead ) // not at the first position
                        h->InsertAfter(LastHead);
                else // first position in header list
                {
                        h->Prev = (GisWriteHead*)head;
                        h->Next = *head;

                        if ( *head ) (*head)->Prev = h;

                        *head = h;
                }
        }

        return h;
}
char GetMidiInstrument ( GisToken token)

Definiert in Zeile 58 der Datei GIS_Head.cpp.

Benutzt DEBUGLOG2, GetGisType(), GTParaStr, mutString und mutT.

Wird benutzt von GisReadArtHead::Read().

{
        if ( token && GetGisType(token) == GTParaStr ) {
                mutString t;
#if defined(WX)
                mutString v;
                long value;
                t=(((GisParaStr*)token)->s).Upper();
                DEBUGLOG2(other,_T("t= %s"), t.c_str());

                if (t.StartsWith(mutT("MIDI"),&v)) {
                        v.ToLong(&value);
                        DEBUGLOG2(other,_T("v= %s"), v.c_str());
                        return (char) value;
                }

#else
                strncpy(t, ((GisParaStr*)token)->s, 30);

                strupr(t);

                if ( !strncmp(t, "MIDI", 4) )
                        return atoi(&t[4]);

#endif
        }

        return 0;
}
wxString EDevice::GetName ( )

return the name of the device

This function returns the name of the device. All spaces (' ') are replaced by '_'.

Rückgabe:
name of the device.

Definiert in Zeile 73 der Datei EDevice.cpp.

Benutzt EDevice::Name.

{
        wxString s = Name;
        s.Replace(_T(" "), _T("_"));
        return s;
}
ChordNote * GisWriteHead::GetNote ( int  instrId,
int  taste 
)

Definiert in Zeile 1046 der Datei GIS_Head.cpp.

Benutzt ChordNote::CheckId(), GisWriteHead::ChordNotes und ChordNote::Next.

{
        ChordNote *ANote = ChordNotes;

        while ( ANote ) {
                if ( ANote->CheckId(instrId, taste) )
                        break;

                ANote = ANote->Next;
        }

        return ANote;
}
double GetReal ( GisToken token)

Definiert in Zeile 48 der Datei GIS_Head.cpp.

Benutzt GetGisType(), GTParaInt und GTParaReal.

Wird benutzt von GisReadArtHead::Read().

{
        if ( GetGisType(token) == GTParaInt )
                return (double) ((GisParaInt*)token)->i;
        else if ( GetGisType(token) == GTParaReal )
                return ((GisParaReal*)token)->x;

        return 0;
}
ERoute * EDevice::GetRoute ( int  nr)

find a route to a given number

Parameter:
nrIndex indicating which route to return

Definiert in Zeile 46 der Datei EDevice.cpp.

Benutzt ERoute::Next und EDevice::Routes.

{
        for (ERoute *R = Routes; R; R = R->Next) {
                if ( !nr ) return R;
                nr--;
        }
        return 0;
}
int GetTheSpeedFactor ( GisToken token)

Definiert in Zeile 89 der Datei GIS_Head.cpp.

Benutzt DEBUGLOG2, GetGisType(), GTParaStr, mutString, mutT und ZIFFER.

Wird benutzt von GisReadArtHead::Read().

{
        DEBUGLOG2(other,_T("%p"),token);

        if ( token && GetGisType(token) == GTParaStr ) {
                const mutString &t = ((GisParaStr*) token) -> s;

                DEBUGLOG2(other,_T("%s"),t.c_str());

                int i = 0;

                long n=0, d=0, bpm=0;

                while ( !ZIFFER && t[i] )
                        i++;

                while ( ZIFFER )
                        n = n*10 + (t[i++]-mutT('0'));

                while ( !ZIFFER && t[i] )
                        i++;

                while ( ZIFFER )
                        d = d*10 + (t[i++]-mutT('0'));

                while ( !ZIFFER && t[i] )
                        i++;

                while ( ZIFFER )
                        bpm = bpm*10 + (t[i++]-mutT('0'));

                DEBUGLOG2(other,_T("%d * 30000 / %d / %d"),d,n,bpm);

                if ( !n || !d || bpm < 4 )
                        return 2000;
                else
                        return d * 30000 / n / bpm;
        }

        return 2000;
}
void GisReadArtDummy ( GisReadArtHead ,
char   
)

Definiert in Zeile 631 der Datei GIS_Head.cpp.

{
        // just a dummy
}
frac GisReadArtHeadOn ( GisReadArtHead **  Head,
frac  dTime,
GisReadArtProceed proceed 
)

Definiert in Zeile 637 der Datei GIS_Head.cpp.

Benutzt GisReadHead::Boss, GisReadHead::Cursor, GisReadHead::CursorNext(), GisReadHead::CutOut(), DEBUGLOG2, GisReadHead::Next, GisReadHead::nSub, GisReadArtHead::Read(), GisReadHead::Time, GisReadArtHead::Time2 und GisReadHead::Turn.

{
        DEBUGLOG2(other,_T(""));
        frac MinTime = frac(-1, 1);

beginloop:

        while ( *Head ) {
                GisReadArtHead *h = *Head;

                if ( h->nSub > 0 ) // header has subs
                {
                        Head = (GisReadArtHead**)&(h->Next);
                        continue;
                }
                if ( h->nSub == 0 ) // all subs has finished
                {
                        proceed(h, h->Turn++);   // end of segment or sequenz
                        h->CursorNext();
                        h->Time = 0;
                }
                if ( h->Time != frac(0, 1) ) // header in normal state
                {
                        h->Time -= dTime;

                        if ( h->Time <= frac(0, 1) )
                        {
                                proceed(h, h->Turn++);

                                if ( h->Turn == 2 ) {
                                        h->Time = h->Time2;
                                        h->Time2 = 0;
                                }

                                if ( h->Turn > 2 )
                                        h->CursorNext();
                        }
                }

                h->nSub = -1; // normal header
                // now check, wether count down Time is 0
                // if h->time = 0 then h->Cursor points to the GisToken next to proceed

                while ( !(h->Time) ) // read next tokens
                {

                        if ( h->Turn)
                        {
                                proceed(h, h->Turn++);

                                if ( h->Turn == 2 ) {
                                        h->Time = h->Time2;
                                        h->Time2 = 0;
                                }

                                if ( h->Turn > 2 )
                                        h->CursorNext();
                                else
                                        continue;
                        }

                        if ( !h->Cursor ) // header finished, kick away
                        {
                                h->CutOut();

                                if ( h->Boss ) h->Boss->nSub--; // inform the boss

                                delete h;

                                goto beginloop;
                        }
                        // proceed
                        proceed(h, 0);

                        h->Read();

                        if ( h->nSub != -1 ) goto beginloop;

                        if ( !(h->Time) ) // token without duration
                                h->CursorNext();
                }
                // check MinTime
                if ( MinTime == frac(-1,1) || h->Time < MinTime )
                        MinTime = h->Time;

                // next Header
                Head = (GisReadArtHead**)&(h->Next);
        }

        return MinTime;
}
void GisReadDummy ( GisReadHead ,
char   
)

Definiert in Zeile 352 der Datei GIS_Head.cpp.

{
        // just a dummy
}
frac GisReadHeadOn ( GisReadHead **  Head,
frac  dTime,
GisReadProceed proceed 
)

Definiert in Zeile 358 der Datei GIS_Head.cpp.

Benutzt GisReadHead::Boss, GisReadHead::Cursor, GisReadHead::CursorNext(), GisReadHead::CutOut(), GisReadHead::Next, GisReadHead::nSub, GisReadHead::Read() und GisReadHead::Time.

{
        frac MinTime = frac(-1, 1);

beginloop:

        while ( *Head ) {
                GisReadHead *h = *Head;

                if ( h->nSub > 0 ) // header has subs
                {
                        Head = &(h->Next);
                        continue;
                }
                if ( h->nSub == 0 ) // all subs has finished
                {
                        proceed(h, 1);
                        h->CursorNext();
                        h->Time = 0;
                }
                if ( h->Time != frac(0, 1) ) // header in normal state
                {
                        h->Time -= dTime;

                        if ( h->Time <= frac(0, 1) )
                        {
                                proceed(h, 1);
                                h->CursorNext();
                        }
                }

                h->nSub = -1; // normal header
                // now check, wether count down Time is 0
                // if h->time = 0 then h->Cursor points to the GisToken next to proceed

                while ( !(h->Time) ) // read next tokens
                {

                        if ( !h->Cursor ) // header finished, kick away
                        {
                                h->CutOut();

                                if ( h->Boss ) h->Boss->nSub--; // inform the boss

                                delete h;

                                goto beginloop;
                        }
                        // proceed
                        proceed(h, 0);

                        h->Read();

                        if ( h->nSub != -1 ) goto beginloop;

                        if ( !(h->Time) ) // token without duration
                                h->CursorNext();
                }
                // check MinTime
                if ( MinTime == frac(-1,1) || h->Time < MinTime )
                        MinTime = h->Time;

                // next Header
                Head = &(h->Next);
        }

        return MinTime;
}
int GisWriteHeadGis ( GisWriteHead **  head,
mutString  id,
GisToken token,
char  turn 
)

Definiert in Zeile 1483 der Datei GIS_Head.cpp.

Benutzt GetMatchingHeader() und GisWriteHead::ProceedGis().

Wird benutzt von OutGis::Gis().

{
        return GetMatchingHeader(head, id)->ProceedGis(token, turn);
}
IMPLEMENT_DYNAMIC_CLASS ( InputDevDlg  ,
InputDevDlgBase   
)

InputDevDlg type definition

GisWriteHead * GisWriteHead::InsertAfter ( GisWriteHead position)

Definiert in Zeile 982 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::Next und GisWriteHead::Prev.

Wird benutzt von GetMatchingHeader().

{
        if ( !position ) {
                Next = 0;
                Prev = 0;
                return this;
        }

        if ( position->Next ) // not last position
                position->Next->Prev = this;

        Next = position->Next;

        Prev = position;

        position->Next = this;

        return this;
}
GisReadHead * GisReadHead::InsertInfrontOf ( GisReadHead position)

Definiert in Zeile 134 der Datei GIS_Head.cpp.

Benutzt DEBUGLOG, GisReadHead::Next, GisReadHead::Prev und GisReadHead::PrevPtr.

Wird benutzt von GisReadHead::GisReadHead().

{
        DEBUGLOG (other, _T("pos = %p; this = %p"),position,this);

        if ( !position ) {
                Next = NULL;
                Prev = this;
                return this;
        }

#if 0
        // *(position->Prev) == position
        if ( *(position->PrevPtr) == position ) { // first position
                DEBUGLOG (other, _T("first position %p, Prev: %p, Next: %p, cmp: %p"),
                         position,
                         position->Prev,
                         position->Next,
                         *((position->PrevPtr))
                        );
                *(position->PrevPtr) = this;
        } else { // normal position in list
                DEBUGLOG (other, _T("first position %p, Prev: %p, Next: %p, cmp: %p"),
                         position,
                         position->Prev,
                         position->Next,
                         *((GisReadHead**)(position->PrevPtr))
                        );
                (*(position->PrevPtr))->Next = this;
        }

        PrevPtr = position->PrevPtr;

        Next = position;
        *(position->PrevPtr) = this;
        return this;
#else
        // *(position->Prev) == position

        if ( *(position->PrevPtr) == position ) { // first position
                DEBUGLOG (other, _T("first position %p, Prev: %p, Next: %p, cmp: %p"),
                         position,
                         position->Prev,
                         position->Next,
                         *((position->PrevPtr))
                        );
                *(position->PrevPtr) = this;
                PrevPtr = position->PrevPtr;
                position->PrevPtr = &(position->Prev);
        } else { // normal position in list
                DEBUGLOG (other, _T("first position %p, Prev: %p, Next: %p, cmp: %p"),
                         position,
                         position->Prev,
                         position->Next,
                         *((GisReadHead**)(position->PrevPtr))
                        );

                position->Prev->Next = this;
                wxASSERT(position->PrevPtr == &(position->Prev));
        }

        Prev = position->Prev;

        Next = position;
        position->Prev = this;

        return this;
#endif
}
int intervall_list_laenge ( struct intervall list)

Definiert in Zeile 119 der Datei Interval.cpp.

Benutzt intervall::next.

Wird benutzt von berechne_intervalle_absolut() und calc_declaration_numbers().

{
        if (list) return 1 + intervall_list_laenge (list -> next);

        return 0;
}
static int intervall_nummer ( const char name) [static]

Definiert in Zeile 138 der Datei Interval.cpp.

Benutzt anzahl_intervalle, fatal_error() und mutC_STR.

Wird benutzt von berechne_intervall_endgueltig() und berechne_intervalle_absolut().

{
        int i;

        for (i=0; i<anzahl_intervalle; i++)
                if ( ! strcmp (name, intervalle[i]->name)) return i;

        fatal_error(26,mutC_STR(name)); /* Ton n.dekl. */

        return 0; /* to prevent warnings */
}
void pascal _export KeyboardAnalyse ( int  box,
int  taste,
char  isLogic 
)

Definiert in Zeile 611 der Datei Execute.cpp.

Benutzt execute_aktion(), first_keyboard und keyboard_ereignis::next.

Wird benutzt von KeyboardIn() und MutLogicWnd::UpDate().

{
        for (struct keyboard_ereignis *help = first_keyboard[box]; help ; help=help->next)
                if ( toupper(taste)==help->taste && isLogic == ( help->the_logik_to_expand != NULL ) ) {
                        execute_aktion(box, help->aktion);
                        return;
                }
}
void pascal _export KeyboardAnalyseSimple ( int  box,
int  taste 
)

Definiert in Zeile 625 der Datei Execute.cpp.

Benutzt execute_aktion(), first_keyboard und keyboard_ereignis::next.

Wird benutzt von keyboard_analyse() und KeyboardIn().

{

        for (struct keyboard_ereignis *help = first_keyboard[box]; help ; help=help->next)
                if ( toupper(taste)==help->taste ) {
                        execute_aktion(box, help->aktion);
                        return;
                }
}
int ChordNote::MutNoteOff ( )

Definiert in Zeile 942 der Datei GIS_Head.cpp.

Benutzt ChordNote::AlterBegin, ChordNote::Boss, CNAlter, CNNoteOn, ChordNote::CurrentTime, ChordNote::Cursor, GetGisType(), GTNote, ChordNote::LastSep, GisToken::Next, GisWriteHead::NoteOn, ChordNote::nTie und ChordNote::Status.

{
        if ( !(Status & CNNoteOn) )
                return 1;

        if ( GetGisType(*Cursor) != GTNote )
                return 1;

        if ( CurrentTime ) {
                ((GisNote*)(*Cursor))->Duration = CurrentTime;
                Cursor = &(*Cursor)->Next;
        } else // note with no duration
        {
                // delete empty note
                delete *Cursor;
                *Cursor = 0;
                // delete alter

                if ( Status & CNAlter && !(*AlterBegin)->Next ) {
                        delete *AlterBegin;
                        Cursor = AlterBegin;
                        *Cursor = 0;
                        Status -= CNAlter;
                }

                LastSep = 0;

                if ( nTie ) nTie--;
        }

        CurrentTime = 0;

        Status -= CNNoteOn;
        Boss->NoteOn--;
        return 0;
}
int ChordNote::MutNoteOn ( int  key,
double  pitch,
int  instrId,
int  taste,
mutString  sep 
)
EDevice* NewDevice ( EDevice **  List,
DevType  dt,
const wxString &  name,
int  devId,
EDevice oldPos = 0,
EDevice newPos = 0 
)

create a new device.

Parameter:
Listlist where the device should be added
dttype of the new device
namename of the new device
devIdidentifier of the new device
oldPosold position of the device (will be removed or overwritten)
newPosnew position of the devices

Definiert in Zeile 98 der Datei EDevice.cpp.

Benutzt EDevice::AddRoute(), ChangeOutReferences(), DEBUGLOG2, EDevice::DevId, EDevice::DT, DTMidiPort, EDevice::Mode, MutaborDeviceUnregistered, name, EDevice::Name, EDevice::Next und EDevice::Routes.

Wird benutzt von ScanRoutes() und WriteRoutes().

{
        DEBUGLOG2(routing,_T("(%x, %d, %s, %x, %x)"), List, dt, (name.c_str()), oldPos,  newPos);
        // Position finden zum Daten abladen
        EDevice *Pos = 0;
        ERoute *R = 0;
        
        if ( oldPos == newPos && oldPos ) {
                Pos = oldPos;
                Pos->DT = dt;
#ifdef WX
                Pos->Name = name;
#else
                strcpy(Pos->Name, name);
#endif
                Pos->DevId = devId;
                Pos->Mode = MutaborDeviceUnregistered;
        } else {
                if ( oldPos ) {
                        // Position von oldPos als Adresse finden
                        EDevice **PreOldPos = List;
                        
                        for (;*PreOldPos; PreOldPos = &((*PreOldPos)->Next))
                                if ( *PreOldPos == oldPos )
                                        break;
                        
                        // oldPos löschen, Routen retten
                        R = oldPos->Routes;

                        oldPos->Routes = 0;
                        
                        *PreOldPos = (*PreOldPos)->Next;
                        
                        oldPos->Next = 0;
                        
                        delete oldPos;
                }

                // evtl. nur löschen
                if ( dt == -1 ) {
                        if ( R )
                                delete R;

                        return 0;
                }

                // Position von newPos als Adresse finden
                EDevice **PreNewPos = List;

                for (;*PreNewPos; PreNewPos = &((*PreNewPos)->Next))
                        if ( *PreNewPos == newPos )
                                break;

                // Device einfügen
                Pos = new EDevice(dt, name, devId);
                Pos->Routes = R;
                Pos->Next = *PreNewPos;
                *PreNewPos = Pos;
        }
        
        // Testen, ob Device schon so existiert
        for (EDevice **Dev = List ; *Dev; Dev = &((*Dev)->Next))
                if ( *Dev != Pos &&
                    (*Dev)->DT == dt && (
#ifdef WX
                                         ( !(*Dev)->Name.Cmp(name) ) ||
#else
                                         ( !strcmp((*Dev)->Name, name) ) ||
#endif
                                         ( dt == DTMidiPort && (*Dev)->DevId == devId ) ) ) {
                        // doppeltes Device gefunden, Routen ¸bertragen und lˆschen
                        EDevice *Dev1 = *Dev;
                        
                        if ( Dev1->Routes ) {
                                Pos->AddRoute(Dev1->Routes);
                                Dev1->Routes = 0;
                        }
                    
                        *Dev = Dev1->Next;

                        Dev1->Next = 0;
                        ChangeOutReferences(Dev1, Pos);
                        delete Dev1;
                        break;
                }
        return Pos;
}
int EDevice::nRoutes ( )

return the number of routes.

Rückgabe:
number of routes associated with the device

Definiert in Zeile 56 der Datei EDevice.cpp.

Benutzt ERoute::Next und EDevice::Routes.

{
        int n = 0;
        for (ERoute *R = Routes; R; R = R->Next)
                n++;
        return n;
}
void PRINTWINDOW ( wxWindow *  window,
const wxString &  offset = _T ("") 
)

Definiert in Zeile 135 der Datei mxDefs.cpp.

Benutzt DEBUGLOG2.

{
        if (!window) DEBUGLOG2 (other,_T("NULL window."));
        
}
int GisWriteHead::ProceedGis ( GisToken token,
char  turn = 0 
)

cout << "[" << Id << "," << (int)turn << "]"; token->Echo(); cout << " ";

Definiert in Zeile 1235 der Datei GIS_Head.cpp.

Benutzt AddTag(), GisWriteHead::ChordNotes, GisWriteHead::CloseCurrentToken(), GisWriteHead::CommaAtEnd, GisToken::Copy(), GisWriteHead::Cursor, TagListData::Data, EndTag(), GisWriteHead::GetFreeNote(), GTComma, GTNote, GTNull, GTParaInt, GTParaReal, GTParaStr, GTSegment, GTSequenz, GTTag, GTTagBegin, GTTagEnd, GTUnknown, TagListData::data::i, GisWriteHead::Id, GisWriteHead::Key, GisWriteHead::NoteOn, GisWriteHead::Octave, GisToken::Sep, ChordNote::SetNoteOff(), ChordNote::SetNoteOn(), GisWriteHead::State(), TTkey, TToct, GisToken::Type(), GisWriteHead::WriteChord(), WTAG und WTAGEND.

Wird benutzt von GisWriteHeadGis().

{
        int Res = 0;
        int Id;

        if ( turn == 1 ) return 0;

        CommaAtEnd = 0;

        if ( !turn ) // this token first time
        {
                Res = CloseCurrentToken(); // close the current Token

                if ( Res ) return Res;

                switch ( token->Type() )
                {

                case GTNull:
                        return 3; // impossible

                case GTUnknown:
                        *Cursor = new GisToken(token->Sep);

                        Cursor = &((*Cursor)->Next);

                        break;

                case GTSequenz:
                        *Cursor = new GisSequenz(0, token->Sep);

                        ((GisSequenz*)*Cursor)->Sep2 = ((GisSequenz*)token)->Sep2;

                        break;

                case GTSegment:
                        *Cursor = new GisSegment(0, token->Sep);

                        ((GisSegment*)*Cursor)->Sep2 = ((GisSegment*)token)->Sep2;

                        break;

                case GTTag:

                case GTTagBegin:
                        /*                if ( token->Type() == GTTag )
                                                 *Cursor = new GisTag(((GisTag*)token)->Name, ((GisTag*)token)->Para,
                                                        token->Sep);
                                          else
                                                 *Cursor = new GisTagBegin(((GisTag*)token)->Name, ((GisTag*)token)->Para,
                                                        token->Sep); */
                        *Cursor = token->Copy();

                        Id = WTAG->Id;

                        if ( Id == TToct ) {
                                if ( WTAG->GetParaType(1) == GTParaInt )
                                        AddTag(&Octave, WTAG)->Data.i = ((GisParaInt*)WTAG->GetPara(1))->i;
                        } else if ( Id == TTkey ) {
                                if ( WTAG->GetParaType(1) == GTParaInt )
                                        AddTag(&Key, WTAG)->Data.i = ((GisParaInt*)WTAG->GetPara(1))->i;
                        }

                        Cursor = &((*Cursor)->Next);

                        break;

                case GTTagEnd:
                        *Cursor = new GisTagEnd(0, token->Sep);

                        Cursor = &((*Cursor)->Next);

                        if ( WTAGEND->Begin ) {
                                Id = WTAGEND->Begin->Id;

                                if ( Id == TToct )
                                        EndTag(&Octave, WTAGEND);
                                else if ( Id == TTkey )
                                        EndTag(&Key, WTAGEND);
                        }

                        break;

                case GTParaInt:

                case GTParaReal:

                case GTParaStr:
                        return 4;

                case GTComma:
                        *Cursor = new GisComma(token->Sep);

                        Cursor = &((*Cursor)->Next);

                        CommaAtEnd = 1;

                        break;

                case GTNote:
                        ChordNote *ANote = GetFreeNote();

                        if ( ANote )
                                ANote->SetNoteOn(token);
                        else
                                return 1;

                        break;
                }
        }
        else // second call
        {
                if ( State() != token->Type() && token->Type() != GTNote) return 2;

                if ( token->Type() != GTNote )
                        Res = CloseCurrentToken();
                else {
                        if ( ChordNotes ) {
                                Res = !ChordNotes->SetNoteOff(token);
                        }

                        if ( !NoteOn ) // write the Chord
                                WriteChord();
                }
        }

        return Res;
}
void GisReadArtHead::Read ( )

Erneute Implementation von GisReadHead.

Definiert in Zeile 503 der Datei GIS_Head.cpp.

Benutzt AddTag(), GisReadArtHead::Alter, ARStaccatto, ARTenuto, GisReadArtHead::Articulation, ArticulationHold, TagListData::data::ch, char, GisReadHead::CreateSegmentSubs(), GisReadHead::CreateSequenzSubs(), GisReadHead::Cursor, TagListData::Data, DEBUGLOG, frac::denominator(), EndTag(), GisReadArtHead::GetArticulation(), GetMidiInstrument(), GetReal(), GetTheSpeedFactor(), GTNote, GTParaInt, GTParaReal, GTParaStr, GTSegment, GTSequenz, GTTag, GTTagBegin, GTTagEnd, TagListData::data::i, GisReadHead::Id, GisReadArtHead::Instr, GisReadArtHead::Intensity, frac::numerator(), GisReadArtHead::Octave, TAG, TAGEND, GisReadArtHead::Tempo, GisReadHead::Time, GisReadArtHead::Time2, TTaccent, TTalter, TTinstr, TTintens, TToct, TTstacc, TTtempo, TTten, GisReadHead::Turn und GisToken::Type().

Wird benutzt von GisReadArtHeadOn() und InGis::ReadOn().

{
        int Id = 0;
        DEBUGLOG (other, _T("Id: %d; Cursor: %p"), Id, Cursor);

        if ( !Cursor ) return;

        Turn = 3;

        DEBUGLOG (other, _T("Cursor->Type %d"), Cursor->Type());

        switch ( Cursor->Type() ) {

        case GTSegment:
                CreateSegmentSubs();

                Turn = 2;

                break;

        case GTSequenz:
                CreateSequenzSubs();

                Turn = 2;

                break;

        case GTNote:
                Time2 = ((GisNote*)Cursor)->Duration;

                Time = Time2 * frac(ArticulationHold[GetArticulation()], 100);

                DEBUGLOG (other, _T("Time: %d/%d; Time2: %d/%d"),
                         Time.numerator(),Time.denominator(),Time2.numerator(),Time2.denominator());

                Time2 -= Time;

                DEBUGLOG (other, _T("Time: %d/%d; Time2: %d/%d"),
                         Time.numerator(),Time.denominator(),Time2.numerator(),Time2.denominator());

                Turn = 1;

                break;

        case GTTag:

        case GTTagBegin:
                Id = TAG->Id;

                if ( Id == TTintens ) {
                        if ( TAG->GetParaType(2) == GTParaInt || TAG->GetParaType(2) == GTParaReal)
                                AddTag(&Intensity, TAG)->Data.ch = (char) (GetReal(TAG->GetPara(2)) * 127);
                } else if ( Id == TTaccent ) {
                        AddTag(&Intensity, TAG)->Data.ch = 120; // ???  what value
                } else if ( Id == TTstacc ) {
                        AddTag(&Articulation, TAG)->Data.ch = ARStaccatto;
                } else if ( Id == TTten ) {
                        AddTag(&Articulation, TAG)->Data.ch = ARTenuto;
                } else if ( Id == TToct ) {
                        if ( TAG->GetParaType(1) == GTParaInt )
                                AddTag(&Octave, TAG)->Data.i = ((GisParaInt*)TAG->GetPara(1))->i;
                } else if ( Id == TTalter ) {
                        if ( TAG->GetParaType(1) != GTParaStr )
                                AddTag(&Alter, TAG)->Data.i = (int) (GetReal(TAG->GetPara(1)) * 0x1FFF) ;
                } else if ( Id == TTinstr ) {
                        if ( TAG->GetParaType(2) == GTParaStr )
                                AddTag(&Instr, TAG)->Data.ch = GetMidiInstrument(TAG->GetPara(2));
                } else if ( Id == TTtempo ) {
                        if ( TAG->GetParaType(2) == GTParaStr ) {
                                long int speed =
                                        (AddTag(&Tempo, TAG)->Data.i =
                                                 GetTheSpeedFactor(TAG->GetPara(2)));
                                DEBUGLOG (other, _T("Got speed factor %ld"),speed);
                        }
                }

                break;

        case GTTagEnd:
                DEBUGLOG (other, _T("Ended tag."));

                if ( !TAGEND->Begin )
                        break;

                DEBUGLOG (other, _T("Tag Id was %d."),TAGEND->Begin->Id);

                Id = TAGEND->Begin->Id;

                if ( Id == TTintens || Id == TTaccent )
                        EndTag(&Intensity, TAGEND);
                else if ( Id == TTstacc || Id == TTten )
                        EndTag(&Articulation, TAGEND);
                else if ( Id == TToct )
                        EndTag(&Octave, TAGEND);
                else if ( Id == TTalter )
                        EndTag(&Alter, TAGEND);
                else if ( Id == TTinstr )
                        EndTag(&Instr, TAGEND);
                else if ( Id == TTtempo )
                        EndTag(&Tempo, TAGEND);
        }

        // the other tokens don't influenz the way of reading
}
void GisReadHead::Read ( )

Erneute Implementation in GisReadArtHead.

Definiert in Zeile 304 der Datei GIS_Head.cpp.

Benutzt GisReadHead::CreateSegmentSubs(), GisReadHead::CreateSequenzSubs(), GisReadHead::Cursor, DEBUGLOG, GTNote, GTSegment, GTSequenz, GisReadHead::Time und GisToken::Type().

Wird benutzt von GisReadHeadOn().

{
        DEBUGLOG (other, _T("Cursor: %p"),Cursor);

        if ( !Cursor ) return;

        switch ( Cursor->Type() ) {

        case GTSegment:
                CreateSegmentSubs();

                break;

        case GTSequenz:
                CreateSequenzSubs();

                break;

        case GTNote:
                DEBUGLOG (other, _T("Setting time"));

                Time = ((GisNote*)Cursor)->Duration;

                break;
        }

        // the other tokens dont influenz the way of reading
}
int GisWriteHead::ReadyForBoss ( )

Definiert in Zeile 1062 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::CloseCurrentToken(), Comma(), GisWriteHead::CommaAtEnd, GisWriteHead::Cursor, GisWriteHead::Data, GTNote, GTSequenz, GisToken::Next, GisWriteHead::SingleToken und GisToken::Type().

Wird benutzt von GisWriteHead::CloseSubs().

{
        CloseCurrentToken(0); //+ zu hart: bei Unknown muß keine Note eingefügt werden (zumindest nur beim ersten
        // put in Sequenz, when single token mode
#ifdef GMN_STRICT

        if ( SingleToken && Data && &Data->Next != Cursor && Data->Type() != GTSequenz ) {
                char isSingle = 2;
                GisToken *Token = Data, LastToken = 0;

                while ( 1 ) {
                        if ( Token->Type() == GTNote )
                                if ( isSingle ) isSingle--;

                        if ( Token->Next )
                                Token = Token->Next;
                        else
                                break;
                }

                if ( !isSingle ) {
                        GisToken **Comma = 0;

                        if ( CommaAtEnd ) // get right position
                        {
                                Comma = &Data;
                                GisToken **Comma = &Data;

                                while ( (*Comma)->Next )
                                        Comma = &((*Comma)->Next);

                                *Comma = 0;
                        }
                        Data = new GisSequenz(Data, " ");

                        Cursor = &Data->Next;

                        if ( Comma ) {
                                *Cursor = *Comma;
                                Cursor = &(*Comma)->Next;
                        }
                }
        }

#endif
        return 0;
}
void GisWriteHead::RemoveComma ( )

Definiert in Zeile 1110 der Datei GIS_Head.cpp.

Benutzt GisWriteHead::CommaAtEnd, GisWriteHead::Cursor, GisWriteHead::Data und GisToken::Next.

Wird benutzt von CloseAllSubs() und GisWriteHead::CloseSubs().

{
        if ( CommaAtEnd ) {
                GisToken **H = &Data;

                while ( &(*H)->Next != Cursor )
                        H = &(*H)->Next;

                GisToken *SaveNext = (*H)->Next;

                delete *H;

                *H = SaveNext;

                Cursor = H;
        }
}
TagList* RemoveTag ( TagList **  list)

Definiert in Zeile 456 der Datei GIS_Head.cpp.

Benutzt TagListData::Next.

Wird benutzt von AddTag() und EndTag().

{
        if ( *list ) {
                TagList *TopTag = *list;
                *list = TopTag->Next;
                delete TopTag;
        }

        return *list;
}
void ScanDevices ( )

translate the GUI routing information to mutabor

make devices and routes so that we can avoid this function enable changes on line

Noch zu erledigen:
Check if this is ok.

Definiert in Zeile 1200 der Datei EDevice.cpp.

Benutzt InDevice::AddRoute(), DEBUGLOG2, OutDevice::GetDeviceList(), InDevice::GetDeviceList(), OutDevice::GetNext(), EDevice::newInDevice(), EDevice::newOutDevice(), ERoute::Next, EDevice::Next und OutEDevices.

{
        // clean device lists
        DEBUGLOG2(routing,_T(""));

        if ( InDevice::GetDeviceList() ) {
                delete InDevice::GetDeviceList();
        }

        if ( OutDevice::GetDeviceList() ) {
                delete OutDevice::GetDeviceList();
        }

        // handle output devices
        {
                OutDevice *Out = OutDevice::GetDeviceList();
                EDevice * oute = OutEDevices;
                if (oute) {
                        Out = oute->newOutDevice();
                        for (oute = oute -> Next; oute ; oute = oute->Next) {
                                DEBUGLOG2(other,_T("oute: %x"), oute);
                                Out -> SetNext(oute->newOutDevice());
                                Out = Out->GetNext();
                        }
                }
        }

        // handle input devices
        for (EDevice * ine = InEDevices; ine ; ine = ine->Next) {

                InDevice *In = ine->newInDevice();
                DEBUGLOG2(other,_T("ine: %x; In: %x"), ine, In);

                if (!In) continue; // Permit unknown devices


                wxASSERT(In);

                // handle routes
                for (ERoute * routee = ine->Routes; routee; routee = routee->Next) {
                        DEBUGLOG2(other,_T("routee: %x"), routee);
                        Route * r = routee->newRoute();
                        wxASSERT(r);
                        DEBUGLOG2(other,_T("route: %x"), r);
                        In->AddRoute(r);
                }
        }
}
void ScanRoutes ( char config)

read the routes from the configuration

Parameter:
configconfiguration to be read

Definiert in Zeile 641 der Datei EDevice.cpp.

Benutzt EDevice::AddRoute(), EDevice::BendingRange, DTUnknown, GetEOut(), GETLINE, InEDevices, NewDevice(), OutEDevices, Str2DT() und Str2RT().

{
        // Listen s‰ubern

        if ( InEDevices ) {
                delete InEDevices;
                InEDevices = 0;
        }

        if ( OutEDevices ) {
                delete OutEDevices;
                OutEDevices = 0;
        }

        // Zerlegen von config
        char s[200], *p1 = config;

        GETLINE;

        while ( strncmp(s, "OUTPUT", 6) ) {
                GETLINE;
        }

        GETLINE;

        // Output lesen

        while ( strncmp(s, "INPUT", 5) ) {
                char Type[20], Name[200];
                int DevId, BendingRange;
                //    int test = sscanf (s, "%s %s %d %d", Type, Name,
                //                     &DevId, &BendingRange);
                int test = sscanf (s, "%s \"%[^\"]^^\" %d %d", Type, Name,
                                   &DevId, &BendingRange);

                if ( test < 2 )
                        test = sscanf (s, "%s %s %d %d", Type, Name, &DevId, &BendingRange);

                if ( test < 2 ) {
                        //3 ??
                }

                EDevice *Out = NewDevice(&OutEDevices, Str2DT(Type), Name, DevId);

                if ( test == 4 )
                        Out->BendingRange = BendingRange;

                GETLINE;
        }

        GETLINE;

        // Input lesen

        while ( 1 ) {
                // Device lesen
                char Type[20], Name[200];
                int DevId = -1;
                int test = sscanf (s, "%s \"%[^\"]\" %d", Type, Name, &DevId);

                if ( test < 2 )
                        test = sscanf (s, "%s %s %d", Type, Name, &DevId);

                if ( test < 2 ) {
                        //3 ??
                }

                EDevice *In = NewDevice(&InEDevices, Str2DT(Type), Name, DevId);

                GETLINE;
                // Routen lesen

                while ( Str2DT(s) == DTUnknown ) {
                        // Route lesen
                        char Type[20];
                        int IFrom = 0, ITo = 0, Box = 0, BoxActive = 0, OutDev = -1, OFrom = -1, OTo = -1, ONoDrum = 1;
                        test = sscanf(s, "%s %d %d %d %d %d %d %d %d",
                                      Type, &IFrom, &ITo, &Box, &BoxActive, &OutDev, &OFrom, &OTo, &ONoDrum);

                        if ( test < 2 ) {
                                //3 ??
                        }

                        In->AddRoute(new ERoute(Str2RT(Type), IFrom, ITo, Box, BoxActive, GetEOut(OutDev), OFrom, OTo, ONoDrum));

                        GETLINE;
                }
        }
}
int ChordNote::SetNoteOff ( GisToken note)

Definiert in Zeile 826 der Datei GIS_Head.cpp.

Benutzt ChordNote::Boss, CmpNote(), CNNoteOn, ChordNote::CurrentTime, ChordNote::Cursor, ChordNote::Next, GisWriteHead::NoteOn, ChordNote::SetNoteOff() und ChordNote::Status.

Wird benutzt von GisWriteHead::ProceedGis() und ChordNote::SetNoteOff().

{

        if ( (Status & CNNoteOn) && CmpNote(*Cursor, note) )
        {
                ((GisNote*)*Cursor)->Duration = CurrentTime;
                Cursor = &((*Cursor)->Next);
                CurrentTime = frac(0,1);
                Status -= CNNoteOn;
                Boss->NoteOn--;
                return 1;
        }

        if ( Next ) return Next->SetNoteOff(note);

        return 0;
}
void ChordNote::SetNoteOn ( GisToken note)

Definiert in Zeile 818 der Datei GIS_Head.cpp.

Benutzt ChordNote::Boss, CNNoteOn, ChordNote::Cursor, NOTE, GisWriteHead::NoteOn und ChordNote::Status.

Wird benutzt von GisWriteHead::ProceedGis().

{
        *Cursor = new GisNote(NOTE->Name, NOTE->Accedentials, NOTE->Octave,
                              frac(0, 1), NOTE->Sep, 0);
        Status += CNNoteOn;
        Boss->NoteOn++;
}
int SmallestBoxUsed ( )

Definiert in Zeile 1179 der Datei EDevice.cpp.

Benutzt ERoute::Next, EDevice::Next und EDevice::Routes.

{
        int Box = 256;

        for (EDevice *In = InEDevices; In; In = In->Next)
                for (ERoute *R = In->Routes; R; R = R->Next)
                        if ( R->Box >= 0 )
#ifdef VC8
                                Box = min(Box, R->Box);

#else
                                Box = STD_PRE::min(Box, R->Box);

#endif
        if ( Box == 256 )
                return 0;
        else
                return Box;
}
DevType Str2DT ( char type)

Definiert in Zeile 197 der Datei EDevice.cpp.

Wird benutzt von ScanRoutes().

{
        char *DTName[] =  { "", "MIDIPORT", "MIDIFILE", "GMN" };
        int i;

        for (i = 3; i > 0; i--)
                if ( !strncmp(type, DTName[i], strlen(DTName[i])) )
                        break;
        
        return (DevType)i;
}
RouteType Str2RT ( mutChar *  type)

parse a string representation of a route type

This function returns the numeric route type to a string representation

Parameter:
typeString (array of mutChar)
Rückgabe:
numeric id of the route type

Definiert in Zeile 235 der Datei EDevice.cpp.

Benutzt RTName.

Wird benutzt von ScanRoutes().

{
        int i;
        
        for (i = 3; i > 0; i--)
                if
#ifndef WX
                        ( !strncmp(type, RTName[i], strlen(RTName[i])) )
#else
                        ( !wxStricmp(type, RTName[i])) //, strlen(RTName[i])) )
#endif
                        break;

        return (RouteType) i;
}
char StrCmp ( const char s1,
const char s2 
)

Definiert in Zeile 743 der Datei GIS_Head.cpp.

Wird benutzt von CmpNote().

{
        if ( s1 ) {
                if ( s2 )
                        return strcmp(s1, s2);
                else
                        return 1;
        } else
                return s2 != 0;
}
static void test_zyklen ( int  startknoten) [static]

Definiert in Zeile 150 der Datei Interval.cpp.

Benutzt adjazent, anzahl_intervalle, fatal_error(), mutC_STR, name und visited.

Wird benutzt von berechne_intervalle_absolut().

{
        int i;

        for (i=0; i<anzahl_intervalle; i++) {
                if (adjazent (startknoten, i)) {
                        if (visited [i]) {
                                fatal_error(67,mutC_STR(intervalle [startknoten]->name),
                                            intervalle [i]->name);
                        }

                        visited [i] = 1;

                        test_zyklen (i);
                        visited [i] = 0;
                }
        }
}
void GisWriteHead::WriteChord ( )

Definiert in Zeile 1366 der Datei GIS_Head.cpp.

Benutzt ChordNote::CheckClose(), GisWriteHead::ChordNotes, GisWriteHead::ChordPos, GisWriteHead::CurrentTime, ChordNote::Cursor, GisWriteHead::Cursor, ChordNote::Data und ChordNote::Next.

Wird benutzt von GisWriteHead::CloseCurrentToken() und GisWriteHead::ProceedGis().

{
        if ( !ChordNotes ) return;

        // close open ties
        ChordNote *ANote = ChordNotes;

        while ( ANote ) {
                ANote->CheckClose();
                ANote = ANote->Next;
        }

        char BossLine = 1; // wether in Boss data also data for Chord;

        char SingleLine = 0; // wether there is in fact only one Line (no real chord)

        if ( Cursor == ChordPos )
                BossLine = 0;

        if ( !ChordNotes->Next && !BossLine )
                SingleLine = 1;

#ifdef CHORDS_WITH_REST
        ChordNotes->AddRest();

#endif
        if ( SingleLine ) // only one line (no real chord)
        {
                *(ChordNotes->Cursor) = *ChordPos;
                *ChordPos = ChordNotes->Data;

                if ( Cursor == ChordPos )
                        Cursor = ChordNotes->Cursor;

                ChordNotes->Data = 0;
        } else {}

        delete ChordNotes;

        ChordNotes = 0;
        CurrentTime = 0;
}
void WriteRoutes ( char **  config)

write the routes to the configuration

Parameter:
configconfiguration to be written to

Definiert in Zeile 1030 der Datei EDevice.cpp.

Benutzt EDevice::BendingRange, EDevice::DevId, EDevice::DT, DTGis, DTMidiFile, DTMidiPort, DTNotSet, DTUnknown, Route::IFrom, EDevice::Mode, EDevice::Name, NewDevice(), ERoute::Next, EDevice::Next, EDevice::Nr, OutEDevices, EDevice::Routes und RTName.

{
        char *s = (char*) malloc(30000), s1[200];
        s[0] = 0;
        // config s‰ubern

        if ( *config )
                free(*config);

        // Unbenˆtigte Out Devices entfernen
        EDevice *Out;

        EDevice *In;

        for (Out = OutEDevices; Out; Out = Out->Next)
                Out->Nr = 0;

        for (In = InEDevices; In; In = In->Next)
                for (ERoute *R = In->Routes; R; R = R->Next)
                        if ( R->Out )
                                R->Out->Nr = 1;

        Out = OutEDevices;

        while ( Out ) {
                if ( !Out->Nr ) {
                        NewDevice(&OutEDevices, DTNotSet, "", 0, Out, 0);
                        Out = OutEDevices;
                        continue;
                }

                Out = Out->Next;
        }

        // Output schreiben
        strcat(s, "OUTPUT\n");

        int nr = 0;

        for ( Out = OutEDevices; Out; Out = Out->Next) {
                Out->Nr = nr++; // Nummerierung zur bequemen Referenzierung beim Input schreiben
                char s2[200];

                if ( strchr(Out->Name, ' ') )
                        sprintf(s2, "\"%s\"", Out->Name);
                else
                        strcpy(s2, Out->Name);

                switch ( Out->DT ) {

                case DTUnknown:
                        sprintf(s1, "  UNKNOWN %s\n", s2);

                        break;

                case DTMidiPort:
                        sprintf(s1, "  MIDIPORT %s %d %d\n", s2, Out->DevId, Out->BendingRange);

                        break;

                case DTMidiFile:
                        sprintf(s1, "  MIDIFILE %s %d %d\n", s2, 0, Out->BendingRange);

                        break;

                case DTGis:
                        sprintf(s1, "  GMN %s\n", s2);

                        break;
                }

                strcat(s, s1);
        }

        // Input schreiben
        nr = 0;

        strcat(s, "INPUT\n");

        for ( In = InEDevices; In; In = In->Next) {
                // Device schreiben
                In->Nr = nr++; // Nummern zur Referenz bei Play/Stop
                In->Mode = 0; // Mode auf "registriert" setzen
                char s2[200];

                if ( strchr(In->Name, ' ') )
                        sprintf(s2, "\"%s\"", In->Name);
                else
                        strcpy(s2,In->Name);

                switch ( In->DT ) {

                case DTUnknown:
                        sprintf(s1, "  UNKNOWN %s\n", s2);

                        break;

                case DTGis:
                        sprintf(s1, "  GMN %s\n", s2);

                        break;

                case DTMidiPort:
                        sprintf(s1, "  MIDIPORT %s %d\n", s2, In->DevId);

                        break;

                case DTMidiFile:
                        sprintf(s1, "  MIDIFILE %s\n", s2);

                        break;
                }

                strcat(s, s1);

                // Routen schreiben

                for (ERoute *R = In->Routes; R; R = R->Next) {
                        int OutNr = ( R->Out ) ?  R->Out->Nr : -1;
                        sprintf(s1, "    %s  %d %d  %d %d  %d  %d %d %d\n",
                                RTName[R->Type], R->IFrom, R->ITo, R->Box, R->Active, OutNr,
                                R->OFrom, R->OTo, R->ONoDrum ? 1 : 0);
                        strcat(s, s1);
                }
        }

        *config = strdup(s);

        free(s);
}

Variablen-Dokumentation

int anzahl_intervalle [static]

Definiert in Zeile 104 der Datei Interval.cpp.

Wird benutzt von berechne_intervalle_absolut(), intervall_nummer() und test_zyklen().

char ArticulationHold[5] = { 80, 100, 90, 90, 60 }

Definiert in Zeile 42 der Datei GIS_Head.cpp.

Wird benutzt von GisReadArtHead::Read().

char ArticulationOff[5] = { 80, 80, 60, 127, 127 }

Definiert in Zeile 43 der Datei GIS_Head.cpp.

bool BoxUsed[MAX_BOX]

which mutabor boxes are used at all?

Definiert in Zeile 1165 der Datei EDevice.cpp.

Wird benutzt von MutFrame::CmDoActivate() und MutFrame::UpdateBoxMenu().

wxHtmlHelpController* HelpController

Definiert in Zeile 228 der Datei MutApp.cpp.

Wird benutzt von MutConfigDialog::CmHelp(), IMPLEMENT_APP(), MutApp::OnExit() und MutApp::ShowHelp().

input devices for GUI

Definiert in Zeile 41 der Datei EDevice.cpp.

Wird benutzt von MutRouteWnd::OnDraw() und ScanRoutes().

struct intervall** intervalle [static]

Definiert in Zeile 106 der Datei Interval.cpp.

bool LogicOn
char* matrix [static]

Definiert in Zeile 112 der Datei Interval.cpp.

Wird benutzt von berechne_intervalle_absolut().

wxMBConv* muConvAutoFallback

Definiert in Zeile 242 der Datei muconvauto.cpp.

wxMBConv* muConvAutoFallback = &wxConvISO8859_1

Definiert in Zeile 242 der Datei muconvauto.cpp.

output devices for GUI

Definiert in Zeile 42 der Datei EDevice.cpp.

Wird benutzt von GetEOut(), ScanDevices(), ScanRoutes() und WriteRoutes().

char* visited [static]

Definiert in Zeile 110 der Datei Interval.cpp.

Wird benutzt von berechne_intervalle_absolut() und test_zyklen().


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