Not sure why this is here... but, you should ask yourself what kind of saving you want to have.
This will allow you to develop a save format based on the exact data required at the point of save and size it is wanted to be.
As your working on a PC which gigabyte (in some cases terrabytes) of space you don't really need to worry about size, unless you want to have the information for an internet based game.
first question you need to ask is, do you want save points or dynamic saving. As in do you want the person to save at a set gamepoint say at the end of a level or whatever point of the game they're upto. Games like Quake3 for example use it simply to keep scores of kills and such rather than any actual player information.
Once you know which kinda of saving you want, you'll then need to figure out what addition data is required...
this is usually determined by the game your developing.
I'll explain this better going through a game that would require alot of information to be saved, Metal Gear Solid.
Now you'd use the File IO commands to achieve the saving of all the information you need.
Firstly what information do we need?
- World
-- Area
-- Events
--- Event
--- Triggered?
-- *People
--- Alive or Dead
--- Position
---- X
---- Y
---- Z
---- Rotation Angle (from loaded 0°)
-- *Items
--- Type
--- Position
---- X
---- Y
---- Z
--- Taken or Not
- Snake
-- Position
--- X
--- Y
--- Z
--- Rotational Angle (from loaded 0°)
-- Health
-- Current Weapon
-- Weapon Status
-- Current Item
-- Item Status
-- *Inventory
--- Item Type
--- Ammount
Now first note i've asterisked(*) some of the information, for those it will be far easier to create Arrays for the information you'll be using however you could quite as easily make a Run-Length Encode for them which would save space if you can only use limited amount of say items.
Once we know what data is required you'll need to figure out what kinda of data you can plant them into. I mean you could use Floats for everything, but is quite inefficient as you kinda have to think about loading times - floats are 16bit real value and although oki they don't take up huge ammounts of processing time, for no reason

(this is also why darkbasic can appear to run faster for others because they optimise the values they're working with)
This should be quite easy to do, simply think about what the max values will be ...
under 255 integer then use a byte
under 65535 interger then use a word
within -2147483648 to 2147483648 interger then use a dword|long
and any real number like 0.0 then use a float|file
strings are open to be used, but really hard to optimise them - so i'd use a string of bytes in each one an ansii value for the letter you want to use.
Now the arrays should be populated and exported prior to actually saving the data you need to ... so this should be done within the function - but remember to undim the arrays to keep things healthy.
once you have everything you need, remember to make a gosub for loading the arrays into memory again ... because if you do them within functions they may not work.
they should be loaded into the file at the end, because you can runtime the rest of the information.
now the advantage from save files over external files that you export from other programs is the headers must be built into the game anyways there is no call to make another one.
Now as you'll notice with the exception of positions and angles there are no other Real numbers required. So we'll have to figure out what actually NEEDS to be over 255.
Always best to work to the smallest possible value, faster loading smaller file created.
Well with the exception of status and amounts (in some cases during the game one and the same thing) everything else should be a byte or info.
I'd keep items and such to a set setup ... like
AK47 - type 1
PPK - type 2
blah blah ... this way you'll know what the numbers mean, and best to compile game arrays to let the game also know unless you write down somewhere what they are and refer whilst finishing off coding.
Once you've got the outlines of how the data needs to be, its time to create the save file using a function.
Creating it is simply a matter of reading the file based on a header you've written down for referance, however loading is another affair entirely and you should make use of the function value export ... as each loop it'll run all the statments when you sequentially create files if you export a value from within a for...next you'll get one value per loop

rather than just the last value.
so
dim save(99)
do
if error = 0 and readsave(sSave$) = 2147483648
error = 1
else
error = 0
endif
if error = 0 then gosub _saveread
sync
loop
_saveread:
for index = 0 to 99
save(index) = readsave(sSave$)
next index
return
function readsave(sSave$)
if file exists(sSave$) = 1
open to read 1,sSave$
for index = 0 to 99
vValue = read byte 1
next index
close file 1
else
vValue = 2147483648
endif
endfunction vValue
that would read the first 100bytes of a save file and dump into an array.

most of your save and read would be similar to that, not really grand ammounts of code to achieve what you need.
read up more on these within the darkbasic 1.1x help files
Anata aru kowagaru no watashi! 