Ok, as I thought this would be a nice little function to write when I had a spare few minutes, I put one together.
The function I have written will accept an entire paragraph as one long text string and will display on screen as it needs to.
The code is below, but you can also download the source and bitmap font that I used from
here.
; now for the function
; p$ = paragraph text
; y = y position on screen
; x = x position on screen (optional - defaults to 0)
; width = column width (optionl - defaults to screen width, as defined in constant)
Function ShowPara(p$,y,x#=0,width=scr_width)
; check that BOTH optional parameters were used and amend width as necessary
If x>0 And width=scr_width Then width=scr_width-x
p=Trim(p) ; remove any spaces
char_width=width/8 ; work out number of chars (assume 8 pixel wide font)
text_line$=Left(p,char_width) ; grab initial number of characters from string
Repeat
z=char_width ; z is used as the length of the current text line
If Instr(text_line," ") Then ; check that there are spaces
While Mid(text_line,z,1)<>" " ; and back track until one is found
z=z-1 ; length of text line is 1 less than where the space was found
Wend
EndIf
text_line=Left(text_line,z-1) ; remove split word at end of line
text_line=Trim(text_line) ; allow for double spaces by using Trim
z=Len(text_line) ; adjust text length to account for any trimming
p=Mid(p,z+2) ; remove this text from the paragraph text
spaces=0 ; counter for number of spaces in line
For i=1 To Len(text_line) ; step through entire string
If Mid(text_line,i,1)=" " Then spaces=spaces+1 ; increase count of space found
Next
s#=8.0+(Float(width-z*8)/spaces) ; calculate width required for each space
ShowText(x,y,text_line,s) ; show text on screen
text_line=Left(p,char_width) ; fetch next row from paragraph
y=y+8 ; lower position of text on screen
Until Len(text_line)<char_width ; keep going until next line is shorter than required width
If Len(text_line)>0 Then ShowText(x,y,Trim(p)):y=y+8 ; print last line if necessary
Return y ; return y for additional position outside of function
End Function
; simple show text routine
Function ShowText(x#,y,t$,s#=8)
For i=1 To Len(t) ; step through each character in turn
char=Asc(Mid(t,i,1))-32 ; calculate frame to display
; if character is space (frame 0), then just increase x, otherwise print character
If char=0 Then x=x+s Else DrawImage font,x,y,char:x=x+8
Next
End Function
It may not be the best written way of doing things, but it works and is a starting point if you wish to adapt it.