diff jcabc2ps-dist/jcabc2ps.h jcabc2ps/jcabc2ps.h 233a234,236 > #define A_HSH 7 /* Half Sharp */ > #define A_HFT 8 /* Half Flat */ > 409c412 < int rootAc; /* A_NT, A_SH or A_FT */ --- > int rootAc; /* A_NT, A_SH, A_HSH, A_HFT, or A_FT */ 413c416 < int atyp[1+ACCMAX]; /* Accidental type (A_SH, A_FT, A_NT) [jc] */ --- > int atyp[1+ACCMAX]; /* Accidental type (A_SH, A_HSH, A_HFT, A_FT, A_NT) [jc] */ diff jcabc2ps-dist/music.c jcabc2ps/music.c 175c175,176 < int a,acc,i,t,j,y; --- > int a,i,t,j,y; > char *acc; 202a204 > if (symb[i].accs[j] == A_HSH) fprintf(stderr,"^/"); 204a207 > if (symb[i].accs[j] == A_HFT) fprintf(stderr,"_/"); 236a240 > if (symb[i].gr.a[j] == A_HSH) fprintf(stderr,"^/"); 238a243 > if (symb[i].gr.a[j] == A_HFT) fprintf(stderr,"_/"); 268a274 > if (symb[i].gr.a[j] == A_HSH) fprintf(stderr,"^/"); 270a277 > if (symb[i].gr.a[j] == A_HFT) fprintf(stderr,"_/"); 305a313 > if (symb[i].t == A_HSH) fprintf(stderr,"halfsharps "); 306a315 > if (symb[i].t == A_HFT) fprintf(stderr,"halfflats "); 311,315c320,326 < acc = (ks->data.atyp[a] == A_SH) ? '^' < : (ks->data.atyp[a] == A_FT) ? '_' < : (ks->data.atyp[a] == A_NT) ? '=' < : '?'; < fprintf(stderr,"%c%c",acc,ks->data.aval[a]); --- > acc = (ks->data.atyp[a] == A_SH) ? "^" > : (ks->data.atyp[a] == A_HSH) ? "^/" > : (ks->data.atyp[a] == A_FT) ? "_" > : (ks->data.atyp[a] == A_HFT) ? "_/" > : (ks->data.atyp[a] == A_NT) ? "=" > : "?"; > fprintf(stderr,"%s%c",acc,ks->data.aval[a]); 1967a1979,1982 > case A_HSH: > V5 "%s: Accidental %d HSH at %d.\n",F,a,ks->data.apos[a]+yad V; > PUT2("%.1f %d hsh0 ",p,ks->data.apos[a]+yad); > break; 1975a1991,1994 > case A_HFT: > V5 "%s: Accidental %d HFT at %d.\n",F,a,ks->data.apos[a]+yad V; > PUT2("%.1f %d hft0 ",p,ks->data.apos[a]+yad); > break; 1994a2014,2026 > } elsif (t == A_HSH) { > p = x; > V3 "%s: A_HSH x=%3.1f\n",F,x V; > for (i=n1;i<=n2;i++) { > if (i>=n3) > PUT2("%.1f %d nt0 ",p,sh_pos[i]+yad) > else { > sf++; > PUT2("%.1f %d hsh0 ",p,sh_pos[i]+yad) > } > p=p+5; > } > PUT0("\n") 2007a2040,2052 > } elsif (t == A_HFT) { > V3 "%s: A_HFT x=%3.1f\n",F,x V; > p = x; > for (i=n1;i<=n2;i++) { > if (i>=n3) > PUT2("%.1f %d nt0 ", p, ft_pos[i]+yad) > else { > sf--; > PUT2("%.1f %d hft0 ", p, ft_pos[i]+yad) > } > p=p+5; > } > PUT0("\n") 2385a2431 > if (acc == A_HSH) PUT2("%.1f %.1f ghsh0 ",xg[i]-4.5,yg[i]) 2386a2433 > if (acc == A_HFT) PUT2("%.1f %.1f ghft0 ",xg[i]-4.5,yg[i]) 2501a2549 > if (s->accs[m] == A_HSH) PUT1(" %.1f hsh", dx) 2503a2552 > if (s->accs[m] == A_HFT) PUT1(" %.1f hft", dx) diff jcabc2ps-dist/parse.c jcabc2ps/parse.c 447a448,449 > int half = 0; // Tonic quarter tone accidental mark. > 568a571,576 > /*Check for quarter tone*/ > half = 0; > if (s[c] == '/') { > half = 1; > c += 1; > } 573,574c581,582 < racc = A_SH; < V6 "%s: racc=A_SH=%d\n",F,racc V; --- > racc = (half ? A_HSH : A_SH); > V6 "%s: racc=A_%sSH=%d\n",F,(half?"S":""),racc V; 579,580c587,588 < racc = A_FT; < V6 "%s: racc=A_FT=%d\n",F,racc V; --- > racc = (half ? A_HFT : A_FT); > V6 "%s: racc=A_%sFT=%d\n",F,(half?"S":""),racc V; 907a916 > int half; 926a936 > if (half = (s[1] == '/')) s++; /*look for half sharp/flat*/ 929c939 < ks->data.atyp[a] = (c == '^') ? A_SH : (c == '_' ) ? A_FT : A_NT; --- > ks->data.atyp[a] = (c == '^') ? (half ? A_HSH : A_SH) : (c == '_' ) ? (half ? A_HFT : A_FT) : A_NT; 961a972,975 > if(s[1] == '/') { > ks->data.rootAc = (d == '#') ? A_HSH : A_HFT; > ++s; > } 1028a1043 > if(*q == '/') { racc_new = A_HFT; q++;} 1030a1046 > if(*q == '/') { racc_new = A_HSH; q++;} 1037a1054,1057 > /*todo: > if (racc_old == A_HFT) pit_old -= 0.5; > if (racc_old == A_HSH) pit_old += 0.5; > */ 1044a1065,1068 > /*todo: > if (racc_new == A_HFT) pit_new-=0.5; > if (racc_new == A_HSH) pit_new+=0.5; > */ 1197a1222 > /*todo: if (acc_old == A_HFT) sf_old = -0.5;*/ 1199a1225 > /*todo: if (acc_old == A_HSH) sf_old = 0.5; */ 1204a1231 > /*todo: if (sf_new == -0.5) acc_new = A_HFT; */ 1206c1233 < if (sf_new == 1) acc_new = A_SH; --- > /*todo: if (sf_new == 0.5) acc_new = A_HSH;*/ 2083,2085c2110,2112 < "_^", /* 6 A_MX */ < "?", /* 7 */ < "?", /* 8 */ --- > "_^", /* 6 A_MX */ > "^/", /* 7 A_HSH */ > "_/", /* 8 A_HFT */ 2103,2104c2130,2134 < *bp++ = (ks->data.rootAc == A_SH) ? '#' < : (ks->data.rootAc == A_FT) ? 'b' --- > if (ks->data.rootAc == A_HSH || > ks->data.rootAc == A_HFT) > *bp++ = '/'; > *bp++ = (ks->data.rootAc == A_SH | ks->data.rootAc == A_HSH) ? '#' > : (ks->data.rootAc == A_FT | ks->data.rootAc == A_HFT) ? 'b' 2706a2737 > elsif (*(P+1) == '/') { agr[n] = A_HSH; P++; } 2710a2742 > elsif (*(P+1) == '/') { agr[n] = A_HFT; P++; } 2826a2859,2860 > } elsif (*(P+1) == '/') { > acc = A_HSH; P++; 2833a2868,2869 > } elsif (*(P+1) == '/') { > acc = A_HFT; P++; diff jcabc2ps-dist/syms.c jcabc2ps/syms.c 625a626,631 > fprintf (fp, "\n/hft0 { %% usage: x y hft0 - half flat sign\n" > " 2 copy ft0 moveto\n"); > fprintf (fp, " -4.0 2.5 rmoveto\n8.00 6.00 rlineto\n"); > fprintf (fp, " stroke\n } bind def\n"); > > 627a634,635 > fprintf (fp, "/hft { %% usage: dx ft - half flat relative to head\n" > " neg x add y hft0 } bind def\n"); 648c656 < fprintf (fp, "\n/sh0 { %% usage: x y sh0 - sharp sign\n" --- > fprintf (fp, "\n/hsh0 { %% usage: x y hsh0 - half sharp sign\n" 657,659d664 < fprintf (fp, " currentpoint stroke moveto\n"); < add_mv (fp,f1,f2,q,12); < add_sg (fp,f1,f2,q,13,1); 660a666,672 > > fprintf (fp, "\n/sh0 { %% usage: x y sh0 - sharp sign\n" > " 2 copy hsh0 moveto\n"); > add_mv (fp,f1,f2,&q[12],0); > add_sg (fp,f1,f2,&q[12],1,1); > fprintf (fp, " stroke\n } bind def\n"); > 663a676,678 > fprintf (fp, "/hsh { %% usage: dx sh - half sharp relative to head\n" > " neg x add y hsh0 } bind def\n"); > 1057a1073,1076 > fprintf(fp, "\n/ghsh0 { %% usage: x y gsh0\n" > "gsave translate 0.7 0.7 scale 0 0 hsh0 grestore\n" > "} bind def\n"); > 1059a1079,1082 > "} bind def\n"); > > fprintf(fp, "\n/ghft0 { %% usage: x y ghft0\n" > "gsave translate 0.7 0.7 scale 0 0 hft0 grestore\n"