This is a proportional font word wrapping routine that is also designed to deal with words that wont fit into the allotted size. It will convert CHR$(10) to CHR$(13) and treat CHR$(13) as a new line. CHR$(9) is treated as 4 spaces.
TYPE TWordWrap
FUNCTION Initialise%:
RETURN TRUE
ENDFUNCTION
FUNCTION Wrap%:text$,maxWidth%,store$[]
LOCAL words$[]
LOCAL loop$
LOCAL curLineLength%
IF maxWidth%<LEN("W",TRUE) THEN RETURN FALSE
IF self.Explode(text$,words$[])=FALSE THEN RETURN FALSE
curLineLength%=0
FOREACH loop$ IN words$[]
DEBUG "Loop : "+loop$+"\n"
IF loop$<>""
IF curLineLength%+LEN(loop$,TRUE)>maxWidth%
IF curLineLength%>0
curLineLength%=0
ENDIF
WHILE LEN(loop$,TRUE)>maxWidth%
LOCAL temp$
LOCAL l%
l%=1
WHILE LEN(LEFT$(loop$,l%)+"-",TRUE)<maxWidth% AND l%<LEN(loop$)
INC l%
WEND
DIMPUSH store$[],LEFT$(loop$,l%-1)+"-"
loop$=MID$(loop$,l%)
WEND
curLineLength%=0
ENDIF
ELSE
curLineLength%=0
ENDIF
IF curLineLength%=0
DIMPUSH store$[],loop$
ELSE
INC store$[-1]," "+loop$
ENDIF
IF loop$<>"" THEN INC curLineLength%,LEN(loop$+" ",TRUE)
NEXT
RETURN TRUE
ENDFUNCTION
FUNCTION Explode%:text$,store$[]
LOCAL temp$[]
LOCAL temp2$[]
LOCAL loop$,loop2$
DIM store$[0]
DIM temp$[0]
IF text$="" THEN RETURN FALSE
text$=REPLACE$(REPLACE$(text$,CHR$(9)," "),CHR$(10),CHR$(13))
IF SPLITSTR(text$,temp$[],CHR$(13))>0
FOREACH loop$ IN temp$[]
DIM temp2$[0]
IF SPLITSTR(loop$,temp2$[]," ")>0
FOREACH loop2$ IN temp2$[]
DIMPUSH store$[],loop2$
NEXT
ENDIF
DIMPUSH store$[],""
NEXT
ENDIF
RETURN TRUE
ENDFUNCTION
ENDTYPE
LOCAL wordWrap AS TWordWrap
LOCAL output$[]
LOCAL fW%,fH%,y%,size%=60
LOADFONT "Media/smalfont.png",0
SETFONT 0
GETFONTSIZE fW%,fH%
y%=0
wordWrap.Initialise()
wordWrap.Wrap("This is a test of the word"+CHR$(13)+"wrapping routine which wraps to a given font width. bshkbsdkhbsdkbsdvkbsdkvbkdvdkjvkbkdbkjebfjkadbfasdjkbsdjkbsdjbsdjkbsdsbdk",size%,output$[])
DRAWRECT 0,0,size%-1,100,RGB(255,0,0)
FOREACH loop$ IN output$[]
PRINT loop$,0,y%,TRUE
INC y%,fH%
NEXT
SHOWSCREEN
KEYWAIT
[attachment deleted by admin]