219 lines
5.0 KiB
C
219 lines
5.0 KiB
C
/*
|
|
FONTS.C - Display fonts
|
|
|
|
This program was used to produce the font displays in the Window Server
|
|
Reference manual.
|
|
*/
|
|
|
|
#include <plib.h>
|
|
#include <wlib.h>
|
|
|
|
#define MINX 2
|
|
#define MINY 2
|
|
#define WIDTH 160
|
|
|
|
LOCAL_D INT FontID;
|
|
LOCAL_D INT CurrentY,CurrentX;
|
|
LOCAL_D G_FONT_INFO FontInfo;
|
|
|
|
LOCAL_C VOID DrawSideLines(INT y1,INT dy)
|
|
{
|
|
gDrawLine(0,y1,0,y1+dy+1);
|
|
gDrawLine(WIDTH-1,y1,WIDTH-1,y1+dy+1);
|
|
}
|
|
|
|
LOCAL_C VOID PrintHexNumber(INT x,INT y,UINT n)
|
|
{
|
|
TEXT buf[5];
|
|
|
|
gPrintText(x,y,&buf[0],p_gtob(&buf[0],n,16));
|
|
}
|
|
|
|
LOCAL_C VOID CDECL PrintLine(INT style,INT final,TEXT *fmt,...)
|
|
{
|
|
INT height,ascent,len;
|
|
P_RECT box;
|
|
G_GC gc;
|
|
TEXT b[80];
|
|
|
|
height=FontInfo.height;
|
|
ascent=FontInfo.ascent;
|
|
if (style&G_STY_DOUBLE)
|
|
{
|
|
height<<=1;
|
|
ascent<<=1;
|
|
}
|
|
if (CurrentX==MINX)
|
|
DrawSideLines(CurrentY,height+1);
|
|
gc.font=FontID;
|
|
gc.style=style;
|
|
gSetGC(0,G_GC_MASK_FONT|G_GC_MASK_STYLE,&gc);
|
|
len=p_atob(&b[0],fmt,&fmt+1);
|
|
box.tl.x=CurrentX;
|
|
box.br.x=WIDTH-MINX;
|
|
box.tl.y=CurrentY;
|
|
box.br.y=box.tl.y+height;
|
|
if (box.br.x>box.tl.x)
|
|
gPrintBoxText(&box,ascent,G_TEXT_ALIGN_LEFT,0,&b[0],len);
|
|
if (final)
|
|
{
|
|
CurrentY+=height+1;
|
|
CurrentX=MINX;
|
|
}
|
|
else
|
|
CurrentX+=gTextWidth(FontID,style,&b[0],len);
|
|
}
|
|
|
|
LOCAL_C VOID SaveFontCodes(VOID)
|
|
{
|
|
INT x,y,dx,dy,xo,yo,yy;
|
|
INT bitmap;
|
|
W_OPEN_BIT_SEG bit;
|
|
G_GC gc;
|
|
P_RECT rect;
|
|
TEXT name[32];
|
|
|
|
dx=18;
|
|
dy=FontInfo.height+1;
|
|
xo=FontInfo.numeric_width+(MINX+5);
|
|
yo=FontInfo.ascent+(MINY+3);
|
|
bit.size.x=dx*16+xo+MINX;
|
|
bit.size.y=dy*16+yo+MINY;
|
|
bitmap=gCreateBit(0,&bit);
|
|
gCreateTempGC0(bitmap);
|
|
gc.font=FontID;
|
|
gSetGC(0,G_GC_MASK_FONT,&gc);
|
|
rect.tl.x=rect.tl.y=0;
|
|
rect.br=bit.size;
|
|
gClrRect(&rect,G_TRMODE_CLR);
|
|
gDrawBox(&rect);
|
|
rect.tl.x=xo-2;
|
|
rect.tl.y=yo-2;
|
|
gDrawBox(&rect);
|
|
for (x=0;x<16;x++)
|
|
PrintHexNumber(x*dx+xo,FontInfo.ascent+1,x);
|
|
name[0]=0;
|
|
for (y=0;y<16;y++)
|
|
{
|
|
PrintHexNumber(3,yy=y*dy+yo+FontInfo.ascent,y);
|
|
for (x=0;x<16;x++)
|
|
{
|
|
gPrintText(x*dx+xo,yy,&name[0],1);
|
|
name[0]++;
|
|
}
|
|
}
|
|
gFreeTempGC();
|
|
p_atos(&name[0],"rem::fcode%d.pic",FontID-WS_FONT_BASE);
|
|
gSaveBit(&name[0],bitmap);
|
|
wFree(bitmap);
|
|
}
|
|
|
|
LOCAL_C VOID DrawFontStyles(VOID)
|
|
{
|
|
P_RECT rect;
|
|
|
|
CurrentY=MINY;
|
|
CurrentX=MINX;
|
|
rect.tl.x=rect.tl.y=0;
|
|
rect.br.x=WIDTH;
|
|
rect.br.y=1000;
|
|
gClrRect(&rect,G_TRMODE_CLR);
|
|
gDrawLine(0,0,WIDTH,0);
|
|
DrawSideLines(0,MINY);
|
|
PrintLine(G_STY_NORMAL,FALSE,"Normal text (%d) ",FontInfo.height);
|
|
PrintLine(G_STY_BOLD,TRUE,"Bold text");
|
|
PrintLine(G_STY_ITALIC,FALSE,"Italic text ");
|
|
PrintLine(G_STY_MONO,TRUE,"Mono text");
|
|
PrintLine(G_STY_DOUBLE,FALSE,"Double height ");
|
|
PrintLine(G_STY_DOUBLE|G_STY_BOLD,TRUE,"Double bold");
|
|
gDrawLine(0,CurrentY,WIDTH,CurrentY);
|
|
}
|
|
|
|
LOCAL_C VOID SaveFontStyles(VOID)
|
|
{
|
|
INT bitmap;
|
|
W_OPEN_BIT_SEG bit;
|
|
TEXT name[32];
|
|
|
|
bit.size.x=WIDTH;
|
|
bit.size.y=CurrentY+1;
|
|
bitmap=gCreateBit(0,&bit);
|
|
gCreateTempGC0(bitmap);
|
|
DrawFontStyles();
|
|
gFreeTempGC();
|
|
p_atos(&name[0],"rem::font%d.pic",FontID-WS_FONT_BASE);
|
|
gSaveBit(&name[0],bitmap);
|
|
wFree(bitmap);
|
|
}
|
|
|
|
LOCAL_C VOID SetFont(INT fid)
|
|
{
|
|
gFontInfo(FontID=fid,0,&FontInfo);
|
|
}
|
|
|
|
LOCAL_C VOID HandleKeyPress(INT code)
|
|
{
|
|
INT i;
|
|
|
|
if (code=='\r')
|
|
p_exit(0);
|
|
if ('0'<=code && code<'6')
|
|
{
|
|
SetFont(code-'0'+WS_FONT_BASE);
|
|
DrawFontStyles();
|
|
}
|
|
if (code=='s')
|
|
{
|
|
wSetBusyMsg("Saving",W_CORNER_TOP_LEFT);
|
|
SaveFontStyles();
|
|
wCancelBusyMsg();
|
|
wInfoMsg("Styles bitmap saved");
|
|
}
|
|
if (code=='a')
|
|
{
|
|
wSetBusyMsg("Saving",W_CORNER_TOP_LEFT);
|
|
for (i=0;i<6;i++)
|
|
{
|
|
SetFont(i+WS_FONT_BASE);
|
|
DrawFontStyles();
|
|
SaveFontStyles();
|
|
}
|
|
wCancelBusyMsg();
|
|
wInfoMsg("Bitmaps saved");
|
|
}
|
|
if (code=='c')
|
|
{
|
|
wSetBusyMsg("Saving",W_CORNER_TOP_LEFT);
|
|
SaveFontCodes();
|
|
wCancelBusyMsg();
|
|
wInfoMsg("Codes bitmap saved");
|
|
}
|
|
if (code=='z')
|
|
{
|
|
wSetBusyMsg("Saving",W_CORNER_TOP_LEFT);
|
|
for (i=0;i<6;i++)
|
|
{
|
|
SetFont(i+WS_FONT_BASE);
|
|
SaveFontCodes();
|
|
}
|
|
wCancelBusyMsg();
|
|
wInfoMsg("Bitmaps saved");
|
|
}
|
|
}
|
|
|
|
GLDEF_C INT main(VOID)
|
|
{
|
|
WS_EV event;
|
|
|
|
wStartup();
|
|
SetFont(WS_FONT_BASE);
|
|
DrawFontStyles();
|
|
for (;;)
|
|
{
|
|
wGetEventWait(&event);
|
|
if (event.type==WM_KEY)
|
|
HandleKeyPress(event.p.key.keycode);
|
|
}
|
|
return(0);
|
|
}
|