04-19-2024, 01:00 AM
(04-19-2024, 12:32 AM)bplus Wrote:I get it. Thanks bplus. But how about this?(04-19-2024, 12:22 AM)PhilOfPerth Wrote:(04-17-2024, 08:57 PM)mdijkens Wrote: If you test your code, always test the limits.
empty strings, long strings, etc.
Yours does not like long lines without dashes or spaces
Not sure I understand @mdijkens... I thought word-wrap meant to wrap the next word if the line was too long. Are you refering to extra-long words, and splitting them at a syllable with a hiphen? Long strings are handled ok with my line-wrap, but, no it doesn't split words. And as for empty strings... why would you wrap them?
perhaps this
Code: (Select All)PrintW "abcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
Sub PrintW (Msg$)
Dim Temp$, Split$, breakspace%, breakdash%
Temp$ = Msg$
While Len(Temp$) > 79
'' Print Len(Temp$)
Split$ = Left$(Temp$, 79)
breakspace% = _InStrRev(Split$, " ")
breakdash% = _InStrRev(Split$, "-")
'' Print Split$
'' Print breakspace%; breakdash%
'' Input X$
If breakspace% > breakdash% Then
Split$ = Left$(Split$, breakspace%)
Temp$ = Mid$(Temp$, breakspace% + 1, Len(Temp$))
Else
Split$ = Left$(Split$, breakdash%)
Temp$ = Mid$(Temp$, breakdash% + 1, Len(Temp$))
End If
'' Print "*"; Len(Temp$)
Print Split$
Wend
Print Temp$
End Sub
Code: (Select All)
SetScreen:
WWidth = 1120: WHeight = 820: Mode = 32: Size = 24
Screen _NewImage(WWidth, WHeight, Mode)
SetFont: f& = _LoadFont("C:\WINDOWS\fonts\courbd.ttf", Size, "monospace"): _Font f&
lhs = (_DesktopWidth - WWidth) / 2
_ScreenMove lhs, 86 ' centre display on screen
text$ = "abcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuv wxyzAbcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
text$ = text$ + text$
text$ = text$ + " " ' add space at end to catch remnant of text
LineStart = 1 ' set linelength to be 80
LineEnd = LineStart + 79 ' LineEnd is 80
FindSpace:
Ch$ = Mid$(text$, LineEnd + 1, 1)
If Ch$ <> " " Then ' Ch$ is character after LineEnd
LineEnd = LineEnd - 1 ' if it's NOT a space, move LineEnd left until it IS
If LineEnd = LineStart Then
Print Mid$(text$, LineStart, 80)
LineStart = LineStart + 80
LineEnd = LineStart + 79
End If
GoTo FindSpace
End If
Print Mid$(text$, LineStart, LineEnd - LineStart + 1) ' print line from linestart to lineend
LineStart = LineEnd + 2
If Mid$(text$, LineStart + 1, 1) = " " Then ' if char after end is a space (it's not)
LineStart = LineStart + 1 ' step past it for new LineStart position
End If
LineEnd = LineEnd + 80
If CsrLin > 30 Then Print: Print "Press a key for more": Sleep: Cls
If LineStart >= Len(text$) Then Sleep: System
GoTo FindSpace ' go again if not at end of text
End
(added lines 20 to 24)
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.)
Please visit my Website at: http://oldendayskids.blogspot.com/
Please visit my Website at: http://oldendayskids.blogspot.com/