The code that follows is a shell for adding some of these behaviors to the PureBASIC concole. It combines the Print() and PrintN() procedures with the the ConsoleLocate() procedure, allows you to embed carrage return codes (Chr(13)) into your strings to determine where lines should end and others start, and remembers global values for the row and column, so that you can continue printing from your last location if you so desire.
The main program just displays how some of these features can be used to enhance your ability to write to the opened console window.
Code: Select all
Declare WriteConsole(a.l,b.l,d.s)
Declare.s pad(str.s,size.l)
OpenConsole()
Global scnwidth,scnheight,row,col
scnwidth=80
scnheight=25
t$="This is a test."
u$="And so is"
v$="this test"
ofs=0
For cnt=1 To 25
WriteConsole(cnt-1,0,pad(Str(cnt),2)+" "+t$)
WriteConsole(25-cnt,40,pad(Str(cnt),2)+" "+t$)
If cnt-Int(cnt/3)*3 = 1
writeconsole(25-cnt,scnwidth-cnt/3-10,Mid(v$,Len(v$)-ofs,1))
ofs=ofs+1
writeconsole(25-cnt,cnt/3+24,Mid(u$,ofs,1))
EndIf
Next
Repeat
Until Inkey()>""
CloseConsole()
End
Procedure.s pad(str.s,size.l)
tmp$=Str.s
If Len(tmp$)<size
tmp$=Space(size-Len(tmp$))+tmp$
EndIf
ProcedureReturn tmp$
EndProcedure
Procedure WriteConsole(rw,cl,txt$)
tt$=txt$
If rw>=0
row=rw
EndIf
If cl>=0
col=cl
EndIf
;frontcolor(cr/65536,cr/256 And 255,cr And 255)
ConsoleLocate(col,row)
Repeat
c=FindString(tt$,Chr(13),1)
If c
PrintN(Left(tt$,c-1))
tt$=Mid(tt$,c+1,Len(tt$)-c)
If Left(tt$,1)=Chr(10)
tt$=Mid(tt$,2,Len(tt$)-2)
EndIf
row=row+1
col=1
EndIf
Until c=0
Print(tt$)
col=col+Len(tt$)
While col>scnwidth
row=row+1
col=col-scnwidth
Wend
While row>scnheight
row=scnheight-1
Wend
EndProcedure
