Title : Push/Pop Data Functions
Author : N
Posted : 1+ years ago
Description : Simple stuff to push and pop data to and from banks.
I use these functions heavily in my latest engine, so although simple they're very, very useful.
Code :
Function PushObject(Bank,Value)
Position = BankSize(Bank)
ResizeBank(Bank,Position+4)
PokeInt(Bank,Position,Value)
Return Position/4
End Function
Function PopObject(Bank)
R = PeekInt(Bank,BankSize(Bank)-4)
PokeInt(Bank,BankSize(Bank)-4,0)
ResizeBank(Bank,BankSize(Bank)-4)
Return R
End Function
Function PushFloat(Bank,Value#)
Position = BankSize(Bank)
ResizeBank(Bank,Position+4)
PokeFloat(Bank,Position,Value)
Return Position/4
End Function
Function PopFloat#(Bank)
R# = PeekFloat(Bank,BankSize(Bank)-4)
PokeInt(Bank,BankSize(Bank)-4,0)
ResizeBank(Bank,BankSize(Bank)-4)
Return R#
End Function
Function PushString(Bank,Text$)
Position% = BankSize(Bank)
ResizeBank(Bank,BankSize(Bank)+(Len(Text$)+1))
PokeByte(Bank,Position,0)
For n = 1 To Len(Text$)
PokeByte(Bank,Position+n,Asc(Mid(Text$,n,1)))
Next
Return Position/4
End Function
Function PopString$(Bank)
n = BankSize(Bank)-1
Repeat
K = PeekByte(Bank,n)
If K > 0 Then Text$ = Chr(K)+Text$
n = n - 1
Until K = 0
ResizeBank(Bank,n+1)
Return Text$
End Function
Function EraseObject(Bank,Index)
Size = BankSize(Bank)
If Index <= Size Then
R% = GetObject(Bank,Index)
If Index = Size Then
PokeInt(Bank,(Index)*4,0)
ResizeBank(Bank,Size-4)
Else
n = Index * 4
While n < Size - 4
PokeInt(Bank,n,PeekInt(Bank,n+4))
n = n + 4
Wend
ResizeBank(Bank,Size-4)
EndIf
EndIf
Return R
End Function
Function GetObject(Bank,Index)
Return PeekInt(Bank,Index*4)
End Function
Function GetFloat(Bank,Index)
Return PeekFloat(Bank,Index*4)
End Function
;; The name on this one is a bit vague- it returns the amount of 4-byte objects in a bank. Of course, it's just a BankSize()/4, but it saves time typing
;; Does not work if you've pushed a string onto the bank
Function Objects(Bank)
Return BankSize(Bank)/4
End Function
Comments :
Techlord(Posted 1+ years ago)
Heres a simple Stack using arraysDim stack(size) ;Element stack(0) is used as pointer
;Push Stack
stack(0)=stack(0)+1:stack(stack(0))=value
;Pop Stack
value=stack(stack(0)):stack(0)=stack(0)-1
A stack of stringsDim stack$(255)
;Push Stack
stack(0)=Str(Int(stack(0))+1):stack(stack(0))="string"
;Pop Stack
string$=stack(stack(0)):stack(0)=Str(Int(stack(0))-1)
N(Posted 1+ years ago)
<a href="codearcs96c7.html?code=1160" target="_blank">Ding</a> [/i]