/* Gadget ein(1)/ausschalten(2) */
#define set_gad(gadget,mode) (((struct Border*)((gadget)->GadgetRender))->FrontPen=(mode))

void
textrp(x,y,cp,sl)
char *cp;
{
 if(!sl)sl=strlen(cp);
	Move(myRastPort,(long)x,(long)y);
	Text(myRastPort,cp,(long)sl);
}

void
numrp(x,y,num,fstr)
char *fstr;
{
	static char tbuf[5];

 sprintf(tbuf,fstr,num);
	Move(myRastPort,(long)x,(long)y);
	Text(myRastPort,tbuf,2l);
}

void
invert()
{
	int tx=(cnum%TLEN)*8+TTABX,ty=cnum/TLEN*8+TTABY+1;

	SetDrMd(myRastPort,COMPLEMENT);
	RectFill(myRastPort,(long)tx,(long)(ty-7),(long)(tx+7),(long)(ty));
	SetDrMd(myRastPort,JAM2);
}

void
setpens(a,b)
{
 SetAPen(myRastPort,(long)a);
 SetBPen(myRastPort,(long)b);
}

void
mark(flag)
{
 char c=cnum;

	if(flag) setpens(2,3);
	else setpens(1,2);
	Move(myRastPort,(long)((cnum%TLEN)*8+TTABX),(long)(cnum/TLEN*8+TTABY));
	Text(myRastPort,&c,1l);
	setpens(1,0);
}

void
alpha()
{
	int y=TTABY,j;
	int c=0;
	char ch=0;

	setpens(1,0);
 while(c<NUMCHARS) {
		Move(myRastPort,(long)TTABX,(long)y);
		for(j=0;j<TLEN;j++) {
		 if(marked[c]) setpens(2,1);
			Text(myRastPort,&ch,1l);
			c++;
			ch++;
			setpens(1,0);
		}
		y+=8;
	}
}

void
draw_grid()
{
	int ix,iy,mask,x=temppara.m0+temppara.m1+temppara.m2,y=myppara->y;
	int s0=temppara.m0;
	int s1=temppara.m0+temppara.m1;
	int tx,ty,i,z;

	/* Gitter loeschen */
 SetAPen(myRastPort,0l);
	RectFill(myRastPort,(long)(GRID_XM-MAX_M*GRID_SIZE_X/2),(long)GRID_YO,
	         (long)(GRID_XM+MAX_M*GRID_SIZE_X/2),(long)(GRID_YO+24*GRID_SIZE_Y));

 /* senkrechte Linien */
 gridxi=GRID_XM-x*GRID_SIZE_X/2;
	gridyi=GRID_YO;
	gridxa=gridxi+x*GRID_SIZE_X;
	gridya=gridyi+y*GRID_SIZE_Y;
 for(ix=0;ix<=x;ix++) {
	 SetAPen(myRastPort,(ix==s0||ix==s1)?2l:3l);
	 Move(myRastPort,(long)(ix*GRID_SIZE_X+gridxi),(long)gridyi);
		Draw(myRastPort,(long)(ix*GRID_SIZE_X+gridxi),(long)(gridyi+y*GRID_SIZE_Y));
	}
	/* waagerechte Linien */
	if(y==24) { s0=1;s1=18; }
	else {s0=s1=99;}
 for(iy=0;iy<=y;iy++) {
	 SetAPen(myRastPort,((iy==s1)||(iy==s0))?2l:3l);
	 Move(myRastPort,(long)gridxi,(long)(iy*GRID_SIZE_Y+gridyi));
		Draw(myRastPort,(long)(gridxi+x*GRID_SIZE_X),(long)(iy*GRID_SIZE_Y+gridyi));
	}
	/* Punkte setzen */
	SetAPen(myRastPort,1l);
	y/=8;
	for(iy=y-1;iy>=0;iy--) {
	 for(ix=temppara.m1-1;ix>=0;ix--) {
			z=tempbuf[iy][ix];
			tx=(ix+temppara.m0)*GRID_SIZE_X+gridxi;
			ty=iy*GRID_SIZE_Y*8+gridyi;
		 for(mask=128;mask;mask>>=1,ty+=GRID_SIZE_Y) {
			 if(z&mask) {
					RectFill(myRastPort,(long)(tx+1),(long)(ty+1),
						(long)(tx+GRID_SIZE_X-1),(long)(ty+GRID_SIZE_Y-1));
				}
			}
		}
	}

	SetAPen(myRastPort,1l);
	numrp(170,GBASE+168,temppara.m0,DSTR);
	numrp(272,GBASE+168,temppara.m1,DSTR);
	numrp(374,GBASE+168,temppara.m2,DSTR);
	numrp(545,GBASE+108,cnum,XSTR);
}

void
select_gads()
{
	set_gad(&Gadget_Draft,(draft==e_draft)?1:2);
	set_gad(&Gadget_LQ,(draft==e_lq)?1:2);
	set_gad(&Gadget_Pica,(elpi==e_pica)?1:2);
	set_gad(&Gadget_Elite,(elpi==e_elite)?1:2);
	set_gad(&Gadget_Proportional,(fix==e_prop)?1:2);
	set_gad(&Gadget_Fix,(fix==e_fix)?1:2);
	set_gad(&Gadget_Sub,(subsuper==e_sub)?1:2);
	set_gad(&Gadget_Super,(subsuper==e_super)?1:2);
	set_gad(&Gadget_Condensed,(cond==e_cond)?1:2);
	set_gad(&Gadget_SemiCondensed,(cond==e_semicond)?1:2);

 RefreshGadgets(myWindowPtr->FirstGadget,myWindowPtr,NULL);

 if(draft==e_draft)
	 if(subsuper==e_normal) myppara=&para[0];
		else myppara=&para[5];
	else
	 if(fix==e_fix)
		 if(subsuper==e_normal)
			 if(cond==e_semicond) myppara=&para[3];
				else
				 if(elpi==e_pica) myppara=&para[1];
					else myppara=&para[2];
			else myppara=&para[6];
		else
		 if(subsuper==e_normal) myppara=&para[4];
		 else myppara=&para[7];
}

void
initscreen()
{
 alpha();
	invert();
	setmem(tempbuf,sizeof(tempbuf),0);
	setmem(charbuf,sizeof(charbuf),0);
 setmem(marked,NUMCHARS,0);
	select_gads();
	temppara.m1=myppara->m1max;
	temppara.m0=(myppara->mmax-temppara.m1)/2;
	temppara.m2=myppara->mmax-temppara.m0-temppara.m1;
	global();
	draw_grid();
}
