[abcp commit] r78 - in trunk: examples/abcdump examples/explicit src test

0 views
Skip to first unread message

codesite...@google.com

unread,
Feb 27, 2009, 5:02:45 PM2/27/09
to abcp-...@googlegroups.com
Author: rdentato
Date: Fri Feb 27 14:02:13 2009
New Revision: 78

Modified:
trunk/examples/abcdump/abcdump.c
trunk/examples/explicit/explicit.c
trunk/src/abcp.h
trunk/src/abcpnote.c
trunk/test/a9.txt

Log:


Modified: trunk/examples/abcdump/abcdump.c
==============================================================================
--- trunk/examples/abcdump/abcdump.c (original)
+++ trunk/examples/abcdump/abcdump.c Fri Feb 27 14:02:13 2009
@@ -143,7 +143,7 @@
break;

case T_ENDING :
-
printf("ENDING: %.*s\n",abcBarEndingLen(scn),abcBarEndingStart(scn));
+ printf("ENDING: %d %.*s\n", abcBarEnding(scn),
abcBarEndingLen(scn), abcBarEndingStart(scn));
break;

case T_OVLRESET:

Modified: trunk/examples/explicit/explicit.c
==============================================================================
--- trunk/examples/explicit/explicit.c (original)
+++ trunk/examples/explicit/explicit.c Fri Feb 27 14:02:13 2009
@@ -24,9 +24,14 @@
#include "abcp.h"

float keysig[7];
-float expsig[7];
float barsig[7];

+float lastbend;
+int lastnote;
+float endingbend;
+int endingnote;
+int tie;
+
void printtok(abcScanner *scn)
{
printf("%.*s",abcTokenLen(scn,0),abcTokenStart(scn,0));
@@ -34,14 +39,30 @@

void printnotetok(abcScanner *scn, float bend)
{
+ int note;
+
+ note = abcNote2Num(*abcTokenStart(scn,5));
+
if (bend != 0.0) {
- barsig[abcNote2Num(*abcTokenStart(scn,5))] = bend;
+ barsig[note] = bend;
printtok(scn);
+ lastnote = note;
+ lastbend = bend;
return;
}

- bend = barsig[abcNote2Num(*abcTokenStart(scn,5))];
- if (bend != abcNatural) {
+ if (tie && lastnote == note && lastbend != 0.0)
+ bend = lastbend;
+ else
+ bend = barsig[note];
+
+ lastnote = note;
+ lastbend = bend;
+
+ if (bend == abcNatural) {
+ printf("=");
+ }
+ else {
while (bend <= -100.0) {
printf("_");
bend += 100.0;
@@ -69,27 +90,24 @@
int k;
for (k=0; k<7; k++) {
keysig[k] = 0.0;
- expsig[k] = 0.0;
barsig[k] = 0.0;
}
}

-void copysig(float *dest, float *src)
+void copysig(float *dest, float *ks, float *es)
{
int k;
for (k=0; k<7; k++) {
- dest[k] = src[k];
- }
+ if (es[k] != 0.0) dest[k] = es[k];
+ else dest[k] = ks[k];
+ }
}

void resetbarsig()
{
int k;
for (k=0; k<7; k++) {
- if (expsig[k] != 0.0)
- barsig[k] = expsig[k];
- else
- barsig[k] = keysig[k];
+ barsig[k] = keysig[k];
}
}

@@ -111,9 +129,29 @@

zerosig();
resetbarsig();
-
+ lastnote = 0;
+ lastbend = 0.0;
+ tie = 0;
+
while ((tok = abcNextToken(scn)) != T_EOF) {
switch(tok) {
+ case T_TIE:
+ tie = 1;
+ printtok(scn);
+ break;
+
+ case T_ENDING:
+ if (abcBarEnding(scn) == 1) {
+ endingnote = lastnote;
+ endingbend = lastbend;
+ }
+ else {
+ lastnote = endingnote;
+ lastbend = endingbend;
+ }
+ printtok(scn);
+ break;
+
case T_BAR:
resetbarsig();
printtok(scn);
@@ -122,8 +160,7 @@
case T_FIELD :
switch (abcField(scn)) {
case 'K' :
- copysig(keysig, abcKeySignature(scn));
- copysig(expsig, abcKeyExpSignature(scn));
+ copysig(keysig, abcKeySignature(scn), abcKeyExpSignature(scn));
resetbarsig();
printtok(scn);
break;
@@ -134,9 +171,11 @@

case T_NOTE :
printnotetok(scn,abcNoteBending(scn));
+ tie = 0;
break;

- default: printtok(scn);
+ default:
+ printtok(scn);
}
}


Modified: trunk/src/abcp.h
==============================================================================
--- trunk/src/abcp.h (original)
+++ trunk/src/abcp.h Fri Feb 27 14:02:13 2009
@@ -201,6 +201,7 @@
int abcBarRepeatAfter(abcScanner *scn);
char *abcBarEndingStart(abcScanner *scn);
int abcBarEndingLen(abcScanner *scn);
+int abcBarEnding(abcScanner *scn);

int abcBroken(abcScanner *scn);
float abcChordDuration(abcScanner *scn);

Modified: trunk/src/abcpnote.c
==============================================================================
--- trunk/src/abcpnote.c (original)
+++ trunk/src/abcpnote.c Fri Feb 27 14:02:13 2009
@@ -217,6 +217,12 @@
return abcTokenLen(scn,1) / 2;
}

+int abcBarEnding(abcScanner *scn)
+{
+ if (abcToken(scn) != T_ENDING) return 0;
+ return atoi(abcTokenStart(scn,2));
+}
+
char *abcBarEndingStart(abcScanner *scn)
{
if (abcToken(scn) != T_ENDING) return utlEmptyString;

Modified: trunk/test/a9.txt
==============================================================================
--- trunk/test/a9.txt (original)
+++ trunk/test/a9.txt Fri Feb 27 14:02:13 2009
@@ -6,3 +6,9 @@

K:Bm exp =g
a b c d e f g | a b c =c c d e | c
+
+K:Bb
+c d e f g a b z | a =b-|b
+
+K:Cm
+^F- |: FGEC | A2G=B- |1 Bcde | cz ^F2- :|2 Bcde | c3 z |]

Reply all
Reply to author
Forward
0 new messages