Merkkijonoja muistipaloihin

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Merkkijonoja muistipaloihin

Post by SPuntte »

Kaksi funktiota pinenen ( ja kehnon) esimerkin kera. Funktiot mahdollistavat merkkijonojen käytön suoraan muistipalojen kanssa. Siinä tapauksessa, että annettu muistipala on kirjoitettavalle merkkijonolle liian lyhyt, funktio osaa automaagisesti kasvattaa sen kokoa. Jos muistipalaan on kirjoitettu jo ennestään jotain dataa, se säilyy edellyttäen tietenkin, että uusi data kirjoitetaan vanhan perään eikä päälle.

Koodia:

Code: Select all

//Esimerkkiohjelma

Dim someString

someString = MakeMEMBlock(1)

PokeString(someString, 0, "Hello World!")

Print PeekString(someString, 0)
WaitKey

//=============================================================================================
//Funktiot

//Kirjoittaa muistipalaan merkkijonon
//  mem     kokonaisluku - osoitin,
//          joka saatiin MakeMEMBlock()-
//          funktiolta
//
//  pos     kokonaisluku - kirjoituskohta
//          muistipalassa. 0 on ensimmäinen.
//
//  s       merkkijono - haluttu merkkijono
Function PokeString(mem, pos%, s$)
    Dim l%, i% As Integer
    
    l = Len(s)
    
    //Suurentaa muistipalaa tarvittaessa
    If MEMBlockSize(mem) < (pos + l + 4) Then ResizeMEMBlock mem, (pos + l + 4)
    
    //Kirjoitetaan pituus ennen merkkejä
    PokeInt mem, pos, l
    
    For i = 0 To l - 1
        PokeByte mem, (pos + 4 + i), Asc(Mid(s, i + 1, 1))
    Next i
EndFunction

//Lukee muistipalasta merkkijonon
//  mem     kokonaisluku - osoitin,
//          joka saatiin MakeMEMBlock()-
//          funktiolta
//
//  pos     kokonaisluku - kirjoituskohta
//          muistipalassa. 0 on ensimmäinen.
Function PeekString(mem, pos%)
    Dim l%, i% As Integer
    Dim s$ As String
    
    l = PeekInt(mem, pos)
    
    For i = 0 To l - 1
        s = s + Chr(PeekByte(mem, pos + 4 + i))
    Next i
    
    Return s
EndFunction
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Post Reply