here is a chopper i wrote a while back i remember i took me ages of fiddling around to get it right this is only part of the code to show you if you would like more then just ask it produces proportianal fonts no matter where the font lies in each cell or how big small each font is.
Sub NinosPrint( Font As FontEngine Ptr )
Dim As Integer Min , Max , NonPropFontSpgs
Dim As Zstring Ptr temp
Dim Posi As Integer
Dim StrPos As Integer
Temp = Allocate( Len( Font->Message ) + 1 )
*Temp = Font->Message
StrPos=0
Do
Max = FindCharEnd( Font , Temp[ StrPos ] )
Min = FindCharStart( Font , Temp[ StrPos ] )
NonPropFontSpgs = ( Max - Min )+1
DrawChar( Font , ( Font->Xpos + Posi ) - Min , Font->Ypos , Temp[ StrPos ] )
Posi += NonPropFontSpgs
StrPos += 1
Loop Until ( StrPos = Len( Font->Message ) )
DeAllocate ( Temp )
Font->YAngle += Font->SinWaveSpeed
End Sub
Function FindCharStart( Font As FontEngine Ptr , Byval Letter As String ) As Integer
Dim As Integer TmpBanks
Dim As Integer X , Y
Dim As Integer Last = Font->Width-1 , Switch = 0
Dim As Integer Ptr Drw
Drw = @Font->FontBuffer[ ( Asc( Letter ) - 32 ) * ( Font->Width * Font->Height ) ]
For Y = 0 To Font->Height - 1
For X = 0 To Font->Width-1
If ( *Drw>0 ) And Switch = 0 Then
TmpBanks = X
Switch = 1
EndIf
Drw += 1
Next
Switch = 0
If TmpBanks = 0 Then
TmpBanks = Font->Width - 1
EndIf
If TmpBanks<Last Then Last = TmpBanks
Next
If Asc( Letter ) - 32 = 0 Then Return(0)
Return Last
End Function
Function FindCharEnd( Font As FontEngine Ptr , Byval Letter As String ) As Integer
Dim As Integer TmpBanks
Dim As Integer X , Y
Dim As Integer Last = 0
Dim As Integer Ptr Drw
Drw = @Font->FontBuffer[ ( Asc( Letter ) - 32 ) * ( Font->Width * Font->Height ) ]
For Y = 0 To Font->Height - 1
For X = 0 TO Font->Width - 1
Drw += 1
If ( *Drw ) > 0 Then
TmpBanks = X
EndIf
Next
If TmpBanks>Last Then Last = TmpBanks
Next
If Asc( Letter ) - 32 = 0 Then Return( Font->Width/2 )
Return Last+1
End Function