Support a whole bunch of new elements.
authorJelmer Vernooij <jelmer@samba.org>
Tue, 8 Mar 2005 07:47:46 +0000 (08:47 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Tue, 8 Mar 2005 07:47:46 +0000 (08:47 +0100)
ChangeLog
ptb.c
ptb.h

index aa1f686b0d05abde71b903a0c4811d68c6a1219d..adf69069cf5bfc9ac332bfb5348d2adb3953ac0f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@ All changes, unless specified otherwise, made by Jelmer Vernooij
 <jelmer@samba.org>.
 
 0.4.2:
+ * Default to always printing errors
+ * Allow overriding or disabling of printing function used for errors
+       and warnings
  * Support for some more types of data
  * Fix bugs when reading odd combinations of symbols (multiple 
         coda symbols, etc)
diff --git a/ptb.c b/ptb.c
index 1b4026b5f8375cf8470f51316f434bf49f9e7f4d..09951ea4ab1221dc56fb8244f255b23112cd2047 100644 (file)
--- a/ptb.c
+++ b/ptb.c
@@ -121,7 +121,8 @@ static ssize_t ptb_data(struct ptbf *f, void *data, size_t length)
        return 0;
 }
 
-static ssize_t ptb_data_constant(struct ptbf *f, unsigned char expected) 
+#define ptb_data_constant(f,e) ptb_data_constant_helper(f,e,__LINE__)
+static ssize_t ptb_data_constant_helper(struct ptbf *f, unsigned char expected, int line) 
 {
        unsigned char real;
        ssize_t ret;
@@ -132,7 +133,7 @@ static ssize_t ptb_data_constant(struct ptbf *f, unsigned char expected)
                        ret = ptb_data(f, &real, 1);
        
                if(real != expected) {
-                       ptb_error("%04lx: Expected %02x, got %02x", f->curpos-1, expected, real);
+                       ptb_error("%04lx: Expected %02x, got %02x at line "__FILE__":%d", f->curpos-1, expected, real, line);
                        ptb_assert(f, 0);
                }
        }
@@ -721,6 +722,7 @@ static int handle_CLineData (struct ptbf *bf, const char *section, struct ptb_li
                           & ~LINEDATA_PROPERTY_DEST_NOWHERE
                           & ~LINEDATA_PROPERTY_TIE
                           & ~LINEDATA_PROPERTY_NATURAL_HARMONIC
+                          & ~LINEDATA_PROPERTY_CONTINUES
                           & ~LINEDATA_PROPERTY_MUTED);
        ptb_data(bf, &linedata->transcribe, 1);
        ptb_assert(bf, linedata->transcribe == LINEDATA_TRANSCRIBE_8VA 
@@ -757,13 +759,20 @@ static int handle_CChordText (struct ptbf *bf, const char *section, struct ptb_l
                           & ~0xC0 /*FIXME*/);
        ptb_data(bf, &chordtext->additions, 1);
        ptb_assert_0(bf, chordtext->additions 
+                          & ~CHORDTEXT_EXT_7_9
+                          & ~CHORDTEXT_EXT_7_13
+                          & ~CHORDTEXT_ADD_2
                           & ~CHORDTEXT_ADD_9
+                          & ~CHORDTEXT_ADD_11
                           & ~CHORDTEXT_PLUS_5);
        ptb_data(bf, &chordtext->alterations, 1);
        ptb_data(bf, &chordtext->VII, 1);
        ptb_assert_0(bf, chordtext->VII 
                                 & ~CHORDTEXT_VII 
+                                & ~CHORDTEXT_VII_VI
                                 & ~CHORDTEXT_VII_OPEN
+                                & ~CHORDTEXT_VII_TYPE_2
+                                & ~CHORDTEXT_VII_TYPE_3
                                        );
 
        *dest = (struct ptb_list *)chordtext;
@@ -831,10 +840,12 @@ static int handle_CPosition (struct ptbf *bf, const char *section, struct ptb_li
        ptb_data(bf, &position->offset, 1);
        ptb_data(bf, &position->properties, 2); 
        ptb_assert_0(bf, position->properties 
+                          & ~POSITION_PROPERTY_IRREGULAR_GROUPING
                           & ~POSITION_PROPERTY_IN_SINGLE_BEAM
                           & ~POSITION_PROPERTY_IN_DOUBLE_BEAM
                           & ~POSITION_PROPERTY_IN_TRIPLE_BEAM
                           & ~POSITION_PROPERTY_FIRST_IN_BEAM
+                          & ~POSITION_PROPERTY_PARTIAL_BEAM
                           & ~POSITION_PROPERTY_MIDDLE_IN_BEAM
                           & ~POSITION_PROPERTY_LAST_IN_BEAM);
        ptb_data(bf, &position->dots, 1);
@@ -844,13 +855,23 @@ static int handle_CPosition (struct ptbf *bf, const char *section, struct ptb_li
                                        & ~POSITION_DOTS_REST 
                                        & ~POSITION_DOTS_ARPEGGIO_UP 
                                        & ~POSITION_DOTS_ARPEGGIO_DOWN
+                                       & ~POSITION_DOTS_WIDE_VIBRATO
                                        & ~POSITION_DOTS_VIBRATO);
        ptb_data(bf, &position->palm_mute, 1);
-       ptb_assert_0(bf, position->palm_mute & ~POSITION_PALM_MUTE & ~POSITION_STACCATO & ~POSITION_ACCENT);
+       ptb_assert_0(bf, position->palm_mute 
+                                & ~POSITION_PALM_MUTE 
+                                & ~POSITION_STACCATO 
+                                & ~POSITION_ACCENT
+                                & ~POSITION_HEAVY_ACCENT
+                                & ~POSITION_PICKSTROKE_DOWN
+                                & ~POSITION_TREMOLO_PICKING
+                                );
        ptb_data(bf, &position->fermenta, 1);
        ptb_assert_0(bf, position->fermenta
                                        & ~POSITION_FERMENTA_ACCIACCATURA
                                        & ~POSITION_FERMENTA_LET_RING
+                                       & ~POSITION_FERMENTA_TRIPLET_FEEL_FIRST
+                                       & ~POSITION_FERMENTA_TRIPLET_FEEL_SECOND
                                        & ~POSITION_FERMENTA_TRIPLET_1
                                        & ~POSITION_FERMENTA_TRIPLET_2
                                        & ~POSITION_FERMENTA_TRIPLET_3
@@ -914,11 +935,25 @@ static int handle_CRhythmSlash (struct ptbf *bf, const char *section, struct ptb
        
        ptb_data(bf, &rhythmslash->offset, 1);
        ptb_data(bf, &rhythmslash->properties, 1);
-       ptb_assert_0(bf, rhythmslash->properties & ~RHYTHMSLASH_PROPERTY_FIRST_IN_BEAM);
+       ptb_assert_0(bf, rhythmslash->properties 
+                                & ~RHYTHMSLASH_PROPERTY_FIRST_IN_BEAM
+                                & ~RHYTHMSLASH_PROPERTY_IN_SINGLE_BEAM
+                                & ~RHYTHMSLASH_PROPERTY_IN_DOUBLE_BEAM
+                                & ~RHYTHMSLASH_PROPERTY_LAST_IN_BEAM
+                                & ~RHYTHMSLASH_PROPERTY_PARTIAL_BEAM
+                                & ~RHYTHMSLASH_PROPERTY_TRIPLET_FIRST
+                                & ~RHYTHMSLASH_PROPERTY_TRIPLET_SECOND
+                                & ~RHYTHMSLASH_PROPERTY_TRIPLET_THIRD
+                                );
        ptb_data(bf, &rhythmslash->dotted, 1);
-       ptb_data_constant(bf, 0);
+       ptb_data(bf, &rhythmslash->extra, 1);
+       ptb_assert_0(bf, rhythmslash->extra 
+                                & ~RHYTHMSLASH_EXTRA_ARPEGGIO_UP
+                                & ~RHYTHMSLASH_EXTRA_ACCENT
+                                & ~RHYTHMSLASH_EXTRA_HEAVY_ACCENT
+                                & ~0x18 /* FIXME */);
        ptb_data(bf, &rhythmslash->length, 1);
-       ptb_data_constant(bf, 0);
+       ptb_data(bf, &rhythmslash->singlenote, 1);
 
        *dest = (struct ptb_list *)rhythmslash;
        return 1;
diff --git a/ptb.h b/ptb.h
index a928be2373098e1524590135583c6c732fb358f0..db8f39f864376ff1c8a3e6586e9029011f364285 100644 (file)
--- a/ptb.h
+++ b/ptb.h
@@ -202,12 +202,19 @@ struct ptb_chordtext {
 #define CHORDTEXT_PROPERTY_FORMULA_M7B5                0x0D
        uint8_t properties;
        uint8_t offset;
+#define CHORDTEXT_EXT_7_9                                      0x01
 #define CHORDTEXT_PLUS_5                                       0x02
+#define CHORDTEXT_EXT_7_13                                     0x04
+#define CHORDTEXT_ADD_2                                                0x08
 #define CHORDTEXT_ADD_9                                                0x40
+#define CHORDTEXT_ADD_11                                       0x80
        uint8_t additions;
        uint8_t alterations;
 #define CHORDTEXT_VII_OPEN                                     0x01
+#define CHORDTEXT_VII_VI                                       0x06
 #define CHORDTEXT_VII                                          0x08
+#define CHORDTEXT_VII_TYPE_2                           0x20
+#define CHORDTEXT_VII_TYPE_3                           0x40
        uint8_t VII;
 };
 
@@ -215,28 +222,41 @@ struct ptb_position {
        struct ptb_position *prev, *next;
 
        uint8_t offset;
-#define POSITION_PALM_MUTE                                             0x20
+#define POSITION_PICKSTROKE_DOWN                               0x01
 #define POSITION_STACCATO                                              0x02
 #define POSITION_ACCENT                                                        0x04
+#define POSITION_HEAVY_ACCENT                                  0x08
+#define POSITION_TREMOLO_PICKING                               0x10
+#define POSITION_PALM_MUTE                                             0x20
        uint8_t palm_mute;
        uint8_t length;
 #define POSITION_DOTS_1                                                        0x01
 #define POSITION_DOTS_2                                                        0x02
 #define POSITION_DOTS_REST                                             0x04
 #define POSITION_DOTS_VIBRATO                                  0x08
+#define POSITION_DOTS_WIDE_VIBRATO                             0x10
 #define POSITION_DOTS_ARPEGGIO_UP                              0x20
 #define POSITION_DOTS_ARPEGGIO_DOWN                            0x40
        uint8_t dots;
+
+       /* Irregular grouping: 
+          Play x notes in the time of y
+          Stored as (x - 1) * 8 + (y - 1)
+       */
+#define POSITION_PROPERTY_IRREGULAR_GROUPING   0x007F
 #define POSITION_PROPERTY_IN_SINGLE_BEAM               0x0080
 #define POSITION_PROPERTY_IN_DOUBLE_BEAM               0x0100
 #define POSITION_PROPERTY_IN_TRIPLE_BEAM               0x0200
 #define POSITION_PROPERTY_FIRST_IN_BEAM                0x0400
+#define POSITION_PROPERTY_PARTIAL_BEAM                 0x0800
 #define POSITION_PROPERTY_LAST_IN_BEAM                 0x1000
 #define POSITION_PROPERTY_MIDDLE_IN_BEAM               0x2000
        uint16_t properties;
        uint8_t let_ring;
        uint8_t fermenta;
 #define POSITION_FERMENTA_ACCIACCATURA                 0x01
+#define POSITION_FERMENTA_TRIPLET_FEEL_FIRST   0x02
+#define POSITION_FERMENTA_TRIPLET_FEEL_SECOND  0x04
 #define POSITION_FERMENTA_LET_RING                             0x08
 #define POSITION_FERMENTA_FERMENTA                             0x10
 #define POSITION_FERMENTA_TRIPLET_1                            0x20
@@ -292,6 +312,7 @@ struct ptb_linedata {
        }; 
 #define LINEDATA_PROPERTY_TIE                                  0x01
 #define LINEDATA_PROPERTY_MUTED                                        0x02
+#define LINEDATA_PROPERTY_CONTINUES                            0x04
 #define LINEDATA_PROPERTY_HAMMERON_FROM                        0x08
 #define LINEDATA_PROPERTY_PULLOFF_FROM                 0x10
 #define LINEDATA_PROPERTY_DEST_NOWHERE                 0x20
@@ -372,11 +393,26 @@ struct ptb_musicbar {
 struct ptb_rhythmslash {
        struct ptb_rhythmslash *prev, *next;
 
+#define RHYTHMSLASH_PROPERTY_IN_SINGLE_BEAM    0x01
+#define RHYTHMSLASH_PROPERTY_IN_DOUBLE_BEAM    0x02
 #define RHYTHMSLASH_PROPERTY_FIRST_IN_BEAM     0x04
+#define RHYTHMSLASH_PROPERTY_PARTIAL_BEAM      0x08
+#define RHYTHMSLASH_PROPERTY_LAST_IN_BEAM      0x10
+#define RHYTHMSLASH_PROPERTY_TRIPLET_FIRST     0x20
+#define RHYTHMSLASH_PROPERTY_TRIPLET_SECOND    0x40
+#define RHYTHMSLASH_PROPERTY_TRIPLET_THIRD     0x80
        uint8_t properties;
        uint8_t offset;
        uint8_t dotted;
        uint8_t length;
+       uint8_t extra;
+#define RHYTHMSLASH_EXTRA_ARPEGGIO_UP          0x02
+#define RHYTHMSLASH_EXTRA_ACCENT                       0x20
+#define RHYTHMSLASH_EXTRA_HEAVY_ACCENT         0x40
+       uint8_t singlenote; /* 
+               5 MSB contains fret
+               3 LSB contains string
+               */
 };
 
 struct ptb_direction {