functions and arrays

Blitz3D Forums/Blitz3D Beginners Area/functions and arrays

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

here ya go..

I used 'notify' here.. 'print' caused some crashes here.. I guess you know what to do if you don't have B+ .. it's all fairly obvious.

bnk=CreateTextBank(10,40) ; 10:elements, 40:stringwidth

For t=0 To 9
	SetTextbankText(bnk,t,"BlitzMax - we're waiting "+t+" months")
Next


; lousy test function
test(bnk)

FreeBank bnk ; <-- rather don't forget this! always clean-up your mess :)

End

Function test(blah)

	For t=0 To TextbankElements(blah)-1
		Notify TextbankText(blah,t)
	Next
	
	Notify TextbankElements(blah)
	Notify TextbankWidth(blah)
	
End Function


; ---------------------------------------------------------------------
;
; Textbank - by CS^TBL
;
; bank=CreateTextBank(elements,width)
; SetTextbankText(bank,element,txt$)
; a$=TextbankText(bank,element(,cut))
; width=TextbankWidth(bank)
; elements=TextbankElements(bank)
;
; bank: (b=byte, s=short)
;
; [b:B][b:T][b:X][b:T][s:ELEMENTS][s:WIDTH][text .....][text .....][ ... ][ ... ]
;
; ---------------------------------------------------------------------

Function TextbankElements(bank)
	If Not bank End
	If BankSize(bank)<8 End
	For t=0 To 3
		a$=a$+Chr$(PeekByte(bank,t))
	Next
	If a$<>"BTXT" End
	
	Return PeekShort(bank,4)
End Function

Function TextbankWidth(bank)
	If Not bank End
	If BankSize(bank)<8 End
	For t=0 To 3
		a$=a$+Chr$(PeekByte(bank,t))
	Next
	If a$<>"BTXT" End
	
	Return PeekShort(bank,6)
End Function

Function TextbankText$(bank,element,cut=True)
	If Not bank End
	If BankSize(bank)<8 End
	For t=0 To 3
		a$=a$+Chr$(PeekByte(bank,t))
	Next
	If a$<>"BTXT" End
	
	elements=PeekShort(bank,4)
	width=PeekShort(bank,6)

	If element>elements End

	a$=""
	For t=0 To width-1
		a$=a$+Chr$(PeekByte(bank,8+element*width+t))
	Next

	If cut
		a$=Trim$(a$)
	EndIf
	
	Return a$

End Function

Function SetTextbankText(bank,element,s$)
	If Not bank End
	If BankSize(bank)<8 End
	For t=0 To 3
		a$=a$+Chr$(PeekByte(bank,t))
	Next
	If a$<>"BTXT" End
	
	elements=PeekShort(bank,4)
	width=PeekShort(bank,6)
	
	If element>=elements End
	If element<0 End

	l=Len(s$)
	If Len(s$)>width End
	
	For t=0 To Len(s$)-1
		PokeByte bank,8+(element*width)+t,Asc(Mid$(s$,t+1,1))
	Next
	
End Function

Function CreateTextbank(elements,width)

	; checks
	If elements<=0
		error=True
	EndIf
	If width<=0
		error=True
	EndIf
	If error End
	
	bank=CreateBank(8+elements*width)

	; header
	PokeByte bank,0,66 ; B
	PokeByte bank,1,84 ; T
	PokeByte bank,2,88 ; X
	PokeByte bank,3,84 ; T
	
	PokeShort bank,4,elements ; 4
	PokeShort bank,6,width    ; 6
	; texts                   ; 8 ...
	
	Return bank	
End Function