Code archives/Graphics/Dot Matrix Font

This code has been declared by its author to be Public Domain code.

Download source code

Dot Matrix Font by Andy_A2008
Create different looking retro fonts by adjusting
'scale' (size of letters)
'dotSize' (size of oval or rect used to draw the letters)

Characters 0-255 included (DOS extended character set)
AppTitle "Dot Matrix Font"

Global sw%, sh%
Const fntWide% = 8
Const fntHigh% = 12

screen% = 1
Select screen
	Case 1: sw% =  800: sh% =  600
	Case 2: sw% = 1024: sh% =  768
	Case 3: sw% = 1280: sh% = 1024
	Case 4: sw% = 1600: sh% = 1200
End Select

Graphics sw, sh , 32, 2
SetBuffer BackBuffer()

Dim char%(255,11), pow2%(fntWide-1), colr%(fntHigh,3)

;store powers of 2 in pow2() array
For i = 0 To fntWide-1
	pow2%(i) = 2^i
Next

Restore dotMatrixData
;read in data and store in char() array
For i = 0 To 252 Step 4
	Read hexNum$
	counter = 1
	For j = 0 To 3
		For k = 0 To 11
			char(i+j,k) = hex2dec(Mid$(hexNum$,counter,2))
			counter = counter + 2
		Next
	Next
Next

Color 0,255,0

st = MilliSecs()

;play with scale and 'dotSize' for different looks (last two parameters)
dotMatrix(50,30,"Dot Matrix Font", 6, 5)
dotMatrix(10,100,"A scalable dot matrix font for Blitz+ and Blitz3D",2,2)

tx = 10
ty = 220
For i = 0 To 224 Step 32
	msg$ = ""
	For j = 0 To 31
		msg$ = msg$ + Chr$(i+j)
	Next
	dotMatrix(tx, ty, msg$, 3, 3)
	ty = ty + 42
Next

et = MilliSecs()-st
dotMatrix(10, 570, "Elapsed Rendering Time: "+et+" milliseconds", 1,1)

Flip
WaitMouse()
End


Function hex2dec(hexNum$)
	Local hLen%, hx$, ms$, ls$, hi%, lo%

	hLen% = Len(hexNum$)
	If hLen% > 2 Then RuntimeError "Hex number is too big!"
	hx$ = "0123456789ABCDEF"
	hexNum$ = Upper(hexNum$)
	ms$ = Mid(hexNum$,1,1)
	ls$ = Mid(hexNum$,2,1)
	hi% = Instr(hx$, ms$)-1
	lo% = Instr(hx$, ls$)-1
	Return (hi Shl 4) + lo
End Function

;=============================================================
; Function dotMatrix
;=============================================================
; x%, y% are the coordinates where message appears on screen
; msg$   is the text you wish to display
; scale% changes the size of the individual letters
; dotSize% allows different sized 'dots' to create the letters
;=============================================================
Function dotMatrix(x%, y%, msg$, scale%, dotSize%)
	Local ox%, oy%, powMax%, h%, ltr%, j%, i%, chkBit%

	ox% = dotSize% Shr 1
	oy% = ox%
	powMax% = fntWide% - 1

	If msg$ <> "" Then
		For h% = 1 To Len(msg$)
			ltr% = Asc(Mid$(msg$, h% ,1))
			For j% = 0 To fntHigh% - 1
				For i% = 0 To powMax%
					chkBit% = char%(ltr%, j%) And pow2(powMax% - i%)
					If chkBit% > 0 Then
						Oval x% + i% * scale% - ox%, y% + j% * scale% - oy%, dotSize%, dotSize%, True
						;Comment line above and un-comment line below for a different look
						;Rect x% + i% * scale% - ox%, y% + j% * scale% - oy%, dotSize%, dotSize%, True
					End If
				Next
			Next
			x% = x% + fntWide% * scale%
		Next
	End If
End Function

.dotMatrixData
Data "FFFFFFFFFFFFFFFFFFFFFFFF007EC381A581BD99C37E0000007EFFFFDBFFC3E7FF7E0000000044EEFEFEFE7C38100000"
Data "0010387CFEFE7C381000000000183C3CFFE7E718187E000000183C7EFFFF7E18187E0000000000003C7E7E3C00000000"
Data "FFFFFFFFC38181C3FFFFFFFF00003C7E664242667E3C0000FFFFC38199BDBD9981C3FFFF003E0E3A72F8CCCCCC780000"
Data "003C6666663C187E18180000001F19191F181878F8700000007F637F63636367E7E6C000000018DB7EE7E77EDB180000"
Data "0080C0E0F8FEF8E0C08000000002060E3EFE3E0E0602000000183C7E1818187E3C180000006666666666000066660000"
Data "007FDBDBDB7B1B1B1B1B0000007E63303C66663C0CC67E0000000000000000FEFEFE000000183C7E1818187E3C187E00"
Data "00183C7E1818181818180000001818181818187E3C180000000000180CFE0C18000000000000003060FE603000000000"
Data "00000000C0C0C0FE000000000000002466FF6624000000000000101038387C7CFEFE00000000FEFE7C7C383810100000"
Data "000000000000000000000000003078787830300030300000006666662400000000000000006C6CFE6C6C6CFE6C6C0000"
Data "30307CC0C0780C0CF8303000000000C4CC183060CC8C00000070D8D870FADECCDC760000003030306000000000000000"
Data "000C183060606030180C0000006030180C0C0C1830600000000000663CFF3C660000000000000018187E181800000000"
Data "0000000000000000383860000000000000FE000000000000000000000000000038380000000002060C183060C0800000"
Data "007CC6CEDED6F6E6C67C0000001030F03030303030FC00000078CCCC0C183060CCFC00000078CC0C0C380C0CCC780000"
Data "000C1C3C6CCCFE0C0C1E000000FCC0C0C0F80C0CCC780000003860C0C0F8CCCCCC78000000FEC6C6060C183030300000"
Data "0078CCCCEC78DCCCCC7800000078CCCCCC7C181830700000000000383800003838000000000000383800003838183000"
Data "000C183060C06030180C0000000000007E007E0000000000006030180C060C18306000000078CC0C1830300030300000"
Data "007CC6C6DEDEDEC0C07C0000003078CCCCCCFCCCCCCC000000FC6666667C666666FC0000003C66C6C0C0C0C6663C0000"
Data "00F86C66666666666CF8000000FE6260647C646062FE000000FE6662647C646060F00000003C66C6C0C0CEC6663E0000"
Data "00CCCCCCCCFCCCCCCCCC0000007830303030303030780000001E0C0C0C0CCCCCCC78000000E6666C6C786C6C66E60000"
Data "00F060606060626666FE000000C6EEFEFED6C6C6C6C6000000C6C6E6F6FEDECEC6C6000000386CC6C6C6C6C66C380000"
Data "00FC6666667C606060F0000000386CC6C6C6CEDE7C0C1E0000FC6666667C6C6666E600000078CCCCC07018CCCC780000"
Data "00FCB430303030303078000000CCCCCCCCCCCCCCCC78000000CCCCCCCCCCCCCC7830000000C6C6C6C6D6D66C6C6C0000"
Data "00CCCCCC783078CCCCCC000000CCCCCCCC7830303078000000FECE9818306062C6FE0000003C303030303030303C0000"
Data "000080C06030180C06020000003C0C0C0C0C0C0C0C3C000010386CC6000000000000000000000000000000000000FF00"
Data "30301800000000000000000000000000780C7CCCCC76000000E060607C66666666DC00000000000078CCC0C0CC780000"
Data "001C0C0C7CCCCCCCCC7600000000000078CCFCC0CC78000000386C6060F8606060F000000000000076CCCCCC7C0CCC78"
Data "00E060606C76666666E600000018180078181818187E0000000C0C003C0C0C0C0CCCCC7800E06060666C786C66E60000"
Data "0078181818181818187E000000000000FCD6D6D6D6C6000000000000F8CCCCCCCCCC00000000000078CCCCCCCC780000"
Data "00000000DC666666667C60F00000000076CCCCCCCC7C0C1E00000000EC6E766060F000000000000078CC6018CC780000"
Data "00002060FC6060606C38000000000000CCCCCCCCCC76000000000000CCCCCCCC7830000000000000C6C6D6D66C6C0000"
Data "00000000C66C38386CC6000000000000666666663C0C18F000000000FC8C1860C4FC0000001C303060C06030301C0000"
Data "00181818180018181818000000E03030180C183030E000000073DACE000000000000000000000010386CC6C6FE000000"
Data "0078CCCCC0C0C0CCCC7830F000CCCC00CCCCCCCCCC7600000C18300078CCFCC0CC7800003078CC00780C7CCCCC760000"
Data "00CCCC00780C7CCCCC760000C0603000780C7CCCCC760000386C6C38F80C7CCCCC7600000000000078CCC0C0CC7830F0"
Data "3078CC0078CCFCC0C07C000000CCCC0078CCFCC0C07C0000C060300078CCFCC0C07C0000006C6C0078181818187E0000"
Data "10386C0078181818187E00006030180078181818187E000000CC003078CCCCFCCCCC000078CCCC7878CCCCFCCCCC0000"
Data "0C1830FCC4C0F8C0C4FC000000000000FE1B7FD8D8EF0000003E78D8D8FED8D8D8DE00003078CC0078CCCCCCCC780000"
Data "00CCCC0078CCCCCCCC780000C060300078CCCCCCCC7800003078CC00CCCCCCCCCC760000C0603000CCCCCCCCCC760000"
Data "00666600666666663C0C18F0CC0078CCCCCCCCCCCC780000CC00CCCCCCCCCCCCCC78000000303078CCC0C0CC78303000"
Data "3C66606060FC6060C0FE0000CCCCCCCC78FC30FC30300000F0888888F0889E8C8D8600000E1B18187E181818D8700000"
Data "0C183000780C7CCCCC7600000C18300078181818187E00000C18300078CCCCCCCC7800000C183000CCCCCCCCCC760000"
Data "0076DC00F8CCCCCCCCCC000076DC00C6E6F6DECEC6C600000078CCCC7E00FE00000000000078CCCC7800FE0000000000"
Data "003030003060C0C0CC7800000000000000FCC0C0C00000000000000000FC0C0C0C0000000042C6CCD8306EC3860C1F00"
Data "0063E66C78376FDBB33F0300003030003030787878300000000000003366CCCC6633000000000000CC66333366CC0000"
Data "24924924924924924924924955AA55AA55AA55AA55AA55AA6DDBB66DDBB66DDBB66DDBB6181818181818181818181818"
Data "1818181818F818181818181818181818F81818F8181818186666666666E66666666666660000000000FE666666666666"
Data "00000000F81818F81818181866666666E60606E66666666666666666666666666666666600000000FE0606E666666666"
Data "66666666E60606FE000000006666666666FE00000000000018181818F81818F8000000000000000000F8181818181818"
Data "18181818181F0000000000001818181818FF0000000000000000000000FF18181818181818181818181F181818181818"
Data "0000000000FF0000000000001818181818FF181818181818181818181F18181F18181818666666666667666666666666"
Data "666666666760607F00000000000000007F6060676666666666666666E70000FF0000000000000000FF0000E766666666"
Data "66666666676060676666666600000000FF0000FF0000000066666666E70000E76666666618181818FF0000FF00000000"
Data "6666666666FF00000000000000000000FF0000FF181818180000000000FF66666666666666666666667F000000000000"
Data "181818181F18181F00000000000000001F18181F1818181800000000007F6666666666666666666666E7666666666666"
Data "18181818FF0000FF181818181818181818F800000000000000000000001F181818181818FFFFFFFFFFFFFFFFFFFFFFFF"
Data "000000000000FFFFFFFFFFFFF0F0F0F0F0F0F0F0F0F0F0F00F0F0F0F0F0F0F0F0F0F0F0FFFFFFFFFFFFF000000000000"
Data "0000000076DECCCCDE7600000078CCCCD8CCCCCCF8C0600000FCCCCCC0C0C0C0C0C0000000FE6C6C6C6C6C6C6C660000"
Data "00FCC46460306064C4FC0000000000007EC8CCCCCC7800000000000066666666667B60C000000076DC181818180E0000"
Data "00FC3078CCCCCC7830FC00000078CCCCCCFCCCCCCC780000007CC6C6C6C66C6C6CEE0000003C603078CCCCCCCC780000"
Data "00000076DBDBDB6E000000000000067CDED6F67CC0000000003C60C0C0FCC0C0603C0000000078CCCCCCCCCCCCCC0000"
Data "0000FC0000FC0000FC00000000003030FC303000FC0000000060301818306000FC0000000018306060301800FC000000"
Data "00000E1B1B1818181818181818181818181818D8D87000000000303000FC003030000000000073DBCE0073DBCE000000"
Data "003C6666663C000000000000000000001C1C00000000000000000000001800000000000000070404044464341C0C0000"
Data "00D86C6C6C6C00000000000000780C18307C00000000000000003C3C3C3C3C3C3C3C0000000000000000000000000000"

Comments

BlitzSupport2008
Nice!

(BTW I removed the [code] tags from your source, as they're not needed when posting code archive entries.)


Ethan2012
That was COOL.


Code Archives Forum