05-13-2003, 01:41 PM
I developed a very awkward text module for the TC-Lib. It works fine, but I'm sure the definition of the letters (i.e. their bitmaps) must be stored somewhere in the RAM.
Remember the TC-Lib works in true-colour modes, so that a lot of standard features do not work : it seems impossible to just poke an Ascii code, each pixel must be plotted. Moreover, I need a pixel text position on the screen : the row and column stuff do not work...
Can anybody tell me where and how the font is stored in the machine?
Here's the prog (adapted for the SCREEN 12 mode):
=============================================
DECLARE SUB PrintStd (x%, y%, Text$)
DIM SHARED Font%(91, 16)
Data.Font:
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,24,60,60,60,24,24,24,0,24,24,0,0,0,0
DATA 0,102,102,102,36,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,54,54,127,54,54,54,127,54,54,0,0,0,0
DATA 24,24,62,99,67,3,62,96,96,97,99,62,24,24,0,0
DATA 0,0,0,0,67,99,48,24,12,6,99,97,0,0,0,0
DATA 0,0,28,54,54,28,110,59,51,51,51,110,0,0,0,0
DATA 0,12,12,12,6,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,48,24,12,12,12,12,12,12,24,48,0,0,0,0
DATA 0,0,12,24,48,48,48,48,48,48,24,12,0,0,0,0
DATA 0,0,0,0,0,102,60,255,60,102,0,0,0,0,0,0
DATA 0,0,0,0,0,24,24,126,24,24,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,24,24,24,12,0,0,0
DATA 0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0
DATA 0,0,0,0,64,96,48,24,12,6,3,1,0,0,0,0
DATA 0,0,28,54,99,99,107,107,99,99,54,28,0,0,0,0
DATA 0,0,24,28,30,24,24,24,24,24,24,126,0,0,0,0
DATA 0,0,62,99,96,48,24,12,6,3,99,127,0,0,0,0
DATA 0,0,62,99,96,96,60,96,96,96,99,62,0,0,0,0
DATA 0,0,48,56,60,54,51,127,48,48,48,120,0,0,0,0
DATA 0,0,127,3,3,3,63,96,96,96,99,62,0,0,0,0
DATA 0,0,28,6,3,3,63,99,99,99,99,62,0,0,0,0
DATA 0,0,127,99,96,96,48,24,12,12,12,12,0,0,0,0
DATA 0,0,62,99,99,99,62,99,99,99,99,62,0,0,0,0
DATA 0,0,62,99,99,99,126,96,96,96,48,30,0,0,0,0
DATA 0,0,0,0,24,24,0,0,0,24,24,0,0,0,0,0
DATA 0,0,0,0,24,24,0,0,0,24,24,12,0,0,0,0
DATA 0,0,0,96,48,24,12,6,12,24,48,96,0,0,0,0
DATA 0,0,0,0,0,126,0,0,126,0,0,0,0,0,0,0
DATA 0,0,0,6,12,24,48,96,48,24,12,6,0,0,0,0
DATA 0,0,62,99,99,48,24,24,24,0,24,24,0,0,0,0
DATA 0,0,0,62,99,99,123,123,123,59,3,62,0,0,0,0
DATA 0,0,8,28,54,99,99,127,99,99,99,99,0,0,0,0
DATA 0,0,63,102,102,102,62,102,102,102,102,63,0,0,0,0
DATA 0,0,60,102,67,3,3,3,3,67,102,60,0,0,0,0
DATA 0,0,31,54,102,102,102,102,102,102,54,31,0,0,0,0
DATA 0,0,127,102,70,22,30,22,6,70,102,127,0,0,0,0
DATA 0,0,127,102,70,22,30,22,6,6,6,15,0,0,0,0
DATA 0,0,60,102,67,3,3,123,99,99,102,92,0,0,0,0
DATA 0,0,99,99,99,99,127,99,99,99,99,99,0,0,0,0
DATA 0,0,60,24,24,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,120,48,48,48,48,48,51,51,51,30,0,0,0,0
DATA 0,0,103,102,102,54,30,30,54,102,102,103,0,0,0,0
DATA 0,0,15,6,6,6,6,6,6,70,102,127,0,0,0,0
DATA 0,0,99,119,127,127,107,99,99,99,99,99,0,0,0,0
DATA 0,0,99,103,111,127,123,115,99,99,99,99,0,0,0,0
DATA 0,0,62,99,99,99,99,99,99,99,99,62,0,0,0,0
DATA 0,0,63,102,102,102,62,6,6,6,6,15,0,0,0,0
DATA 0,0,62,99,99,99,99,99,99,107,123,62,48,112,0,0
DATA 0,0,63,102,102,102,62,54,102,102,102,103,0,0,0,0
DATA 0,0,62,99,99,6,28,48,96,99,99,62,0,0,0,0
DATA 0,0,126,126,90,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,99,99,99,99,99,99,99,99,99,62,0,0,0,0
DATA 0,0,99,99,99,99,99,99,99,54,28,8,0,0,0,0
DATA 0,0,99,99,99,99,107,107,107,127,119,54,0,0,0,0
DATA 0,0,99,99,54,62,28,28,62,54,99,99,0,0,0,0
DATA 0,0,102,102,102,102,60,24,24,24,24,60,0,0,0,0
DATA 0,0,127,99,97,48,24,12,6,67,99,127,0,0,0,0
DATA 0,0,60,12,12,12,12,12,12,12,12,60,0,0,0,0
DATA 0,0,0,1,3,7,14,28,56,112,96,64,0,0,0,0
DATA 0,0,60,48,48,48,48,48,48,48,48,60,0,0,0,0
DATA 8,28,54,99,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0
DATA 0,12,24,48,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,30,48,62,51,51,51,110,0,0,0,0
DATA 0,0,7,6,6,30,54,102,102,102,102,62,0,0,0,0
DATA 0,0,0,0,0,62,99,3,3,3,99,62,0,0,0,0
DATA 0,0,56,48,48,60,54,51,51,51,51,110,0,0,0,0
DATA 0,0,0,0,0,62,99,127,3,3,99,62,0,0,0,0
DATA 0,0,56,108,76,12,30,12,12,12,12,30,0,0,0,0
DATA 0,0,0,0,0,110,51,51,51,51,51,62,48,51,30,0
DATA 0,0,7,6,6,54,110,102,102,102,102,103,0,0,0,0
DATA 0,0,24,24,0,28,24,24,24,24,24,60,0,0,0,0
DATA 0,0,96,96,0,112,96,96,96,96,96,96,102,102,60,0
DATA 0,0,7,6,6,102,54,30,30,54,102,103,0,0,0,0
DATA 0,0,28,24,24,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,0,0,0,55,127,107,107,107,107,99,0,0,0,0
DATA 0,0,0,0,0,59,102,102,102,102,102,102,0,0,0,0
DATA 0,0,0,0,0,62,99,99,99,99,99,62,0,0,0,0
DATA 0,0,0,0,0,59,102,102,102,102,102,62,6,6,15,0
DATA 0,0,0,0,0,110,51,51,51,51,51,62,48,48,120,0
DATA 0,0,0,0,0,59,110,102,6,6,6,15,0,0,0,0
DATA 0,0,0,0,0,62,99,6,28,48,99,62,0,0,0,0
DATA 0,0,8,12,12,63,12,12,12,12,108,56,0,0,0,0
DATA 0,0,0,0,0,51,51,51,51,51,51,110,0,0,0,0
DATA 0,0,0,0,0,99,99,99,99,99,54,28,0,0,0,0
DATA 0,0,0,0,0,99,99,107,107,107,127,54,0,0,0,0
DATA 0,0,0,0,0,99,54,28,28,28,54,99,0,0,0,0
DATA 0,0,0,0,0,99,99,99,99,99,99,126,96,48,31,0
DATA 0,0,0,0,0,127,51,24,12,6,99,127,0,0,0,0
RESTORE Data.Font
FOR k% = 0 TO 90
FOR p% = 0 TO 15
READ Font%(k%, p%)
NEXT p%
NEXT k%
SCREEN 12
PrintStd 53, 72, "Standard QB font", 2
' Attente d'une touche
DO WHILE INKEY$ = ""
LOOP
' Retour au mode texte et fin du programme
SCREEN 0
WIDTH 80, 25
CLS
SYSTEM
SUB PrintStd (x%, y%, Text$)
Red%=255 : Green%=255 : Blue%=255
FOR i% = 1 TO LEN(Text$)
Letter% = ASC(MID$(Text$, i%, 1)) - 32
IF Letter% < 0 OR Letter% > 91 THEN Letter% = 0
FOR j% = 0 TO 15
p% = Font%(Letter%, j%)
FOR k% = 0 TO 7
IF p% AND &H1 THEN Pset24 x% + 8 * (i% - 1) + k%, y% + j%)
p% = p% \ 2
NEXT k%
NEXT j%
NEXT i%
END SUB
Remember the TC-Lib works in true-colour modes, so that a lot of standard features do not work : it seems impossible to just poke an Ascii code, each pixel must be plotted. Moreover, I need a pixel text position on the screen : the row and column stuff do not work...
Can anybody tell me where and how the font is stored in the machine?
Here's the prog (adapted for the SCREEN 12 mode):
=============================================
DECLARE SUB PrintStd (x%, y%, Text$)
DIM SHARED Font%(91, 16)
Data.Font:
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,24,60,60,60,24,24,24,0,24,24,0,0,0,0
DATA 0,102,102,102,36,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,54,54,127,54,54,54,127,54,54,0,0,0,0
DATA 24,24,62,99,67,3,62,96,96,97,99,62,24,24,0,0
DATA 0,0,0,0,67,99,48,24,12,6,99,97,0,0,0,0
DATA 0,0,28,54,54,28,110,59,51,51,51,110,0,0,0,0
DATA 0,12,12,12,6,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,48,24,12,12,12,12,12,12,24,48,0,0,0,0
DATA 0,0,12,24,48,48,48,48,48,48,24,12,0,0,0,0
DATA 0,0,0,0,0,102,60,255,60,102,0,0,0,0,0,0
DATA 0,0,0,0,0,24,24,126,24,24,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,24,24,24,12,0,0,0
DATA 0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0
DATA 0,0,0,0,64,96,48,24,12,6,3,1,0,0,0,0
DATA 0,0,28,54,99,99,107,107,99,99,54,28,0,0,0,0
DATA 0,0,24,28,30,24,24,24,24,24,24,126,0,0,0,0
DATA 0,0,62,99,96,48,24,12,6,3,99,127,0,0,0,0
DATA 0,0,62,99,96,96,60,96,96,96,99,62,0,0,0,0
DATA 0,0,48,56,60,54,51,127,48,48,48,120,0,0,0,0
DATA 0,0,127,3,3,3,63,96,96,96,99,62,0,0,0,0
DATA 0,0,28,6,3,3,63,99,99,99,99,62,0,0,0,0
DATA 0,0,127,99,96,96,48,24,12,12,12,12,0,0,0,0
DATA 0,0,62,99,99,99,62,99,99,99,99,62,0,0,0,0
DATA 0,0,62,99,99,99,126,96,96,96,48,30,0,0,0,0
DATA 0,0,0,0,24,24,0,0,0,24,24,0,0,0,0,0
DATA 0,0,0,0,24,24,0,0,0,24,24,12,0,0,0,0
DATA 0,0,0,96,48,24,12,6,12,24,48,96,0,0,0,0
DATA 0,0,0,0,0,126,0,0,126,0,0,0,0,0,0,0
DATA 0,0,0,6,12,24,48,96,48,24,12,6,0,0,0,0
DATA 0,0,62,99,99,48,24,24,24,0,24,24,0,0,0,0
DATA 0,0,0,62,99,99,123,123,123,59,3,62,0,0,0,0
DATA 0,0,8,28,54,99,99,127,99,99,99,99,0,0,0,0
DATA 0,0,63,102,102,102,62,102,102,102,102,63,0,0,0,0
DATA 0,0,60,102,67,3,3,3,3,67,102,60,0,0,0,0
DATA 0,0,31,54,102,102,102,102,102,102,54,31,0,0,0,0
DATA 0,0,127,102,70,22,30,22,6,70,102,127,0,0,0,0
DATA 0,0,127,102,70,22,30,22,6,6,6,15,0,0,0,0
DATA 0,0,60,102,67,3,3,123,99,99,102,92,0,0,0,0
DATA 0,0,99,99,99,99,127,99,99,99,99,99,0,0,0,0
DATA 0,0,60,24,24,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,120,48,48,48,48,48,51,51,51,30,0,0,0,0
DATA 0,0,103,102,102,54,30,30,54,102,102,103,0,0,0,0
DATA 0,0,15,6,6,6,6,6,6,70,102,127,0,0,0,0
DATA 0,0,99,119,127,127,107,99,99,99,99,99,0,0,0,0
DATA 0,0,99,103,111,127,123,115,99,99,99,99,0,0,0,0
DATA 0,0,62,99,99,99,99,99,99,99,99,62,0,0,0,0
DATA 0,0,63,102,102,102,62,6,6,6,6,15,0,0,0,0
DATA 0,0,62,99,99,99,99,99,99,107,123,62,48,112,0,0
DATA 0,0,63,102,102,102,62,54,102,102,102,103,0,0,0,0
DATA 0,0,62,99,99,6,28,48,96,99,99,62,0,0,0,0
DATA 0,0,126,126,90,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,99,99,99,99,99,99,99,99,99,62,0,0,0,0
DATA 0,0,99,99,99,99,99,99,99,54,28,8,0,0,0,0
DATA 0,0,99,99,99,99,107,107,107,127,119,54,0,0,0,0
DATA 0,0,99,99,54,62,28,28,62,54,99,99,0,0,0,0
DATA 0,0,102,102,102,102,60,24,24,24,24,60,0,0,0,0
DATA 0,0,127,99,97,48,24,12,6,67,99,127,0,0,0,0
DATA 0,0,60,12,12,12,12,12,12,12,12,60,0,0,0,0
DATA 0,0,0,1,3,7,14,28,56,112,96,64,0,0,0,0
DATA 0,0,60,48,48,48,48,48,48,48,48,60,0,0,0,0
DATA 8,28,54,99,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0
DATA 0,12,24,48,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,30,48,62,51,51,51,110,0,0,0,0
DATA 0,0,7,6,6,30,54,102,102,102,102,62,0,0,0,0
DATA 0,0,0,0,0,62,99,3,3,3,99,62,0,0,0,0
DATA 0,0,56,48,48,60,54,51,51,51,51,110,0,0,0,0
DATA 0,0,0,0,0,62,99,127,3,3,99,62,0,0,0,0
DATA 0,0,56,108,76,12,30,12,12,12,12,30,0,0,0,0
DATA 0,0,0,0,0,110,51,51,51,51,51,62,48,51,30,0
DATA 0,0,7,6,6,54,110,102,102,102,102,103,0,0,0,0
DATA 0,0,24,24,0,28,24,24,24,24,24,60,0,0,0,0
DATA 0,0,96,96,0,112,96,96,96,96,96,96,102,102,60,0
DATA 0,0,7,6,6,102,54,30,30,54,102,103,0,0,0,0
DATA 0,0,28,24,24,24,24,24,24,24,24,60,0,0,0,0
DATA 0,0,0,0,0,55,127,107,107,107,107,99,0,0,0,0
DATA 0,0,0,0,0,59,102,102,102,102,102,102,0,0,0,0
DATA 0,0,0,0,0,62,99,99,99,99,99,62,0,0,0,0
DATA 0,0,0,0,0,59,102,102,102,102,102,62,6,6,15,0
DATA 0,0,0,0,0,110,51,51,51,51,51,62,48,48,120,0
DATA 0,0,0,0,0,59,110,102,6,6,6,15,0,0,0,0
DATA 0,0,0,0,0,62,99,6,28,48,99,62,0,0,0,0
DATA 0,0,8,12,12,63,12,12,12,12,108,56,0,0,0,0
DATA 0,0,0,0,0,51,51,51,51,51,51,110,0,0,0,0
DATA 0,0,0,0,0,99,99,99,99,99,54,28,0,0,0,0
DATA 0,0,0,0,0,99,99,107,107,107,127,54,0,0,0,0
DATA 0,0,0,0,0,99,54,28,28,28,54,99,0,0,0,0
DATA 0,0,0,0,0,99,99,99,99,99,99,126,96,48,31,0
DATA 0,0,0,0,0,127,51,24,12,6,99,127,0,0,0,0
RESTORE Data.Font
FOR k% = 0 TO 90
FOR p% = 0 TO 15
READ Font%(k%, p%)
NEXT p%
NEXT k%
SCREEN 12
PrintStd 53, 72, "Standard QB font", 2
' Attente d'une touche
DO WHILE INKEY$ = ""
LOOP
' Retour au mode texte et fin du programme
SCREEN 0
WIDTH 80, 25
CLS
SYSTEM
SUB PrintStd (x%, y%, Text$)
Red%=255 : Green%=255 : Blue%=255
FOR i% = 1 TO LEN(Text$)
Letter% = ASC(MID$(Text$, i%, 1)) - 32
IF Letter% < 0 OR Letter% > 91 THEN Letter% = 0
FOR j% = 0 TO 15
p% = Font%(Letter%, j%)
FOR k% = 0 TO 7
IF p% AND &H1 THEN Pset24 x% + 8 * (i% - 1) + k%, y% + j%)
p% = p% \ 2
NEXT k%
NEXT j%
NEXT i%
END SUB
hink Global, Make Symp' All ! ®