va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
+ fputc('\n', stderr);
}
static int ptb_read_items(struct ptbf *bf, const char *assumed_type, struct ptb_list **result) {
static int handle_CPosition (struct ptbf *bf, const char *section, struct ptb_list **dest) {
struct ptb_position *position = GET_ITEM(bf, dest, struct ptb_position);
+ int i;
ptb_data(bf, &position->offset, 1);
ptb_data(bf, &position->properties, 2);
& ~POSITION_FERMENTA_FERMENTA);
ptb_data(bf, &position->length, 1);
- ptb_data(bf, &position->conn_to_next, 1);
+ ptb_data(bf, &position->nr_additional_data, 1);
+
+ position->additional = malloc_p(struct ptb_position_additional, position->nr_additional_data);
- /* FIXME
- if(position->conn_to_next) {
- ptb_debug("Conn to next!: %02x", position->conn_to_next);
- ptb_data_unknown(bf, 4*position->conn_to_next);
- }*/
- if(position->conn_to_next) {
- uint8_t covers, start, end;
- ptb_debug("Conn to next: %02x", position->conn_to_next);
- ptb_data(bf, &start, 1);
- ptb_data(bf, &end, 1);
- ptb_data(bf, &covers, 1);
+ for (i = 0; i < position->nr_additional_data; i++) {
+ ptb_data(bf, &position->additional[i].start_volume, 1);
+ ptb_data(bf, &position->additional[i].end_volume, 1);
+ ptb_data(bf, &position->additional[i].duration, 1);
ptb_data_unknown(bf, 1);
}
#define POSITION_FERMENTA_TRIPLET_1 0x20
#define POSITION_FERMENTA_TRIPLET_2 0x40
#define POSITION_FERMENTA_TRIPLET_3 0x80
- uint8_t conn_to_next;
+
+ uint8_t nr_additional_data;
+ struct ptb_position_additional
+ {
+ uint8_t start_volume;
+ uint8_t end_volume;
+ uint8_t duration; /* Number of following positions */
+ uint8_t properties;
+#define POSITION_ADDITIONAL_VOLUMESWELL 0x61
+#define POSITION_ADDITIONAL_TREMOLOBAR 0x63
+ } *additional;
+
struct ptb_linedata *linedatas;
};
+
+
#define STAFF_TYPE_BASS_KEY 0x10
struct ptb_staff {