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"
