try this wrote it a few days ago for someone.
most of the code is for checks etc.
I've just finishing restoring a backup, so hope its ok:)
most of the code is for checks etc.
I've just finishing restoring a backup, so hope its ok:)
; copy and checking data ; copyright Nicholas Tindall 2005 ; ******************************* Graphics 800, 600, 16, 2 SeedRnd MilliSecs() SetBuffer BackBuffer() ;setup something to test Type badguy Field posx Field posy Field speed# Field number End Type For a = 1 To 1000 bad.badguy = New badguy bad\posx = Rnd (0, GraphicsWidth()) ; randomly enter some data bad\posy = Rnd (0, (GraphicsHeight() / 2) ) + (GraphicsHeight() / 2) bad\speed# = Rnd (0, 10) / 100 bad\number = a Next Type newbadguy ; type the data will be transfered too Field posx Field posy Field speed# Field number End Type ;we will need 2 bytes for some of posx and posy values, 4 bytes for the float and 2 bytes for the number * by 1000: ; (2+2+4+2)= 10 * 1000 = 10000 bankname = CreateBank(10000) offbank = 0 ; offbank is the offset to poke each value to For bad.badguy = Each badguy PokeShort bankname, offbank, bad\posx offbank = offbank + 2 ; increment offbank by the bytes allowed for it, ie 2,2,4 then 2 PokeShort bankname, offbank, bad\posy offbank = offbank + 2 PokeFloat bankname, offbank, bad\speed# offbank = offbank + 4 PokeShort bankname, offbank, bad\number offbank = offbank + 2 Next Global dirPath$ = "" ; change it to a specific directory if you wish Repeat bad.badguy = First badguy If KeyHit(88) ;F12 savingdata = WriteFile(dirPath$ + "checktype.txt") For bad.badguy = Each badguy savedata$ = Str bad\posx +" "+ Str bad\posy +" "+ Str bad\speed# +" "+ Str bad\number WriteLine savingdata, savedata$ Next CloseFile(savingdata) EndIf If KeyHit(67) ;F9 savingdata = WriteFile(dirPath$ + "checkbank.txt") offbank = 0 For a = 1 To 1000 x = PeekShort (bankname, offbank) ;reading a bank is almost the same as writing to one, poke To place Data in a bank - peek To Read that Data offbank = offbank + 2 ; increment offbank by the bytes allowed for it, ie 2,2,4 then 2 y = PeekShort (bankname, offbank) offbank = offbank + 2 speed# = PeekFloat (bankname, offbank) offbank = offbank + 4 number = PeekShort (bankname, offbank) offbank = offbank + 2 savedata$ = Str x +" "+ Str y +" "+ Str speed# +" "+ Str number WriteLine savingdata, savedata$ Next CloseFile(savingdata) EndIf If KeyHit(66) ;F8 savingdata = WriteFile(dirPath$ + "checknewtype.txt") For newbad.newbadguy = Each newbadguy savedata$ = Str newbad\posx +" "+ Str newbad\posy +" "+ Str newbad\speed# +" "+ Str newbad\number WriteLine savingdata, savedata$ Next CloseFile(savingdata) EndIf If KeyHit(63) ; F5 offbank = 0 ; offbank is the offset when peeking, should be the same as when poking For a = 1 To 1000 newbad.newbadguy = New newbadguy ; create a new type then read the data into the type variables newbad\posx = PeekShort (bankname, offbank) ;reading a bank is almost the same as writing to one, poke To place Data in a bank - peek To Read that Data offbank = offbank + 2 ; increment offbank by the bytes allowed for it, ie 2,2,4 then 2 newbad\posy = PeekShort (bankname, offbank) offbank = offbank + 2 newbad\speed# = PeekFloat (bankname, offbank) offbank = offbank + 4 newbad\number = PeekShort (bankname, offbank) offbank = offbank + 2 Next EndIf If KeyHit(62) ; F4 bad.badguy = Last badguy ;we want the Last Type item so we know how many there are - placed in testcheck testx = 0 : testy = 0 : testspeed = 0 : testnumber = 0 : testcheck = bad\number For bad.badguy = Each badguy If bad\number = 1 newbad.newbadguy = First newbadguy Else newbad = After newbad EndIf If newbad\posx = bad\posx Then testx = testx + 1 If newbad\posy = bad\posy Then testy = testy + 1 If newbad\speed# = bad\speed# Then testspeed = testspeed + 1 If newbad\number = bad\number Then testnumber = testnumber + 1 Next EndIf ; i sometimes save data to a file then spot check to see if its correct, can also compare the data ; with code - looking at what i get in a file sometimes helps me debug Text GraphicsWidth() / 2, 20, "Press F12 to save Type data to a file", True, False Text GraphicsWidth() / 2, 40, "Press F9 to save Bank data to a file for checking purposes", True, False Text GraphicsWidth() / 2, 60, "Press F8 to save NEW Type data to a file for checking purposes", True,False Text GraphicsWidth() / 2, 80, "Press F5 to copy Bank data to the new type 'newbadguy' ", True,False Text GraphicsWidth() / 2, 100, "Press F4 to check old and new type info", True,False Text GraphicsWidth() / 2, 120, "'Esc' exits", True,False If testx > 0 And testx < 1000 Text GraphicsWidth() / 2, 160, "posx had Errors in the copying!" ElseIf testx = 1000 Text GraphicsWidth() / 2, 160, "posx had No Errors in the copying:)" EndIf If testy > 0 And testy < 1000 Text GraphicsWidth() / 2, 170, "posy had Errors in the copying!" ElseIf testy = 1000 Text GraphicsWidth() / 2, 170, "posy had No Errors in the copying:)" EndIf If testspeed > 0 And speed < 1000 Text GraphicsWidth() / 2, 180, "speed# had Errors in the copying!" ElseIf testspeed = 1000 Text GraphicsWidth() / 2, 180, "speed# had No Errors in the copying:)" EndIf If testnumber > 0 And testnumber < 1000 Text GraphicsWidth() / 2, 190, "number had Errors in the copying!" ElseIf testnumber = 1000 Text GraphicsWidth() / 2, 190, "number had No Errors in the copying:)" EndIf If testx = 1000 And testy = 1000 And testspeed = 1000 And testnumber = 1000 Text GraphicsWidth() / 2, 220, "ALL fields copied correctly", True, False EndIf Flip Until KeyHit(1) Delete Each newbadguy Delete Each badguy FreeBank bankname ; free bank when finished with it, so it frees up the memory EndGraphics