Not to be confused with the other one.
In SCI11, we get the following FileIO
functions:
(FileIO fileOpen name mode) |
Opens file name with the given mode and returns a handle. |
---|---|
(FileIO fileClose hnd) |
Closes the given file handle. |
(FileIO fileRead hnd ptr size) |
Reads size bytes to the given address. |
(FileIO fileWrite hnd ptr size) |
Writes size bytes from the given address. |
(FileIO fileUnlink name) |
Deletes the given file. |
(FileIO fileFGets ptr size hnd) |
Reads a string of up to size bytes to the given address. |
(FileIO fileFPuts hnd ptr) |
Writes a string from the given address. |
(FileIO fileSeek hnd where from) |
Seeks to the given location. |
(FileIO fileFindFirst pattern ptr attr) |
Finds the first file matching the given pattern and copies its name to the given address. |
(FileIO fileExists name) |
Checks if the given file exists. |
(FileIO fileRename from to) |
Renames the given file. |
(FileIO fileCopy from to buffer len) |
… |
Hmm. So, only null-terminated strings and arbitrary data blocks, huh? Surely you can do better? I wouldn’t want to have to do this every time I wanted to simply save a single 16-bit variable:
(= val gRating) (FileIO fileWrite hnd @val 2)
Actual code from an earlier build of The Dating Pool, in case the name of the global didn’t tip you off.
Now, SCI2 added a whole bunch of extra options to the above:
(FileIO fileReadByte hnd) |
Simply reads and returns a single byte. |
---|---|
(FileIO fileWriteByte hnd val) |
Simply writes a single byte. |
(FileIO fileReadWord hnd) |
Reads a single 16-bit word. |
(FileIO fileWriteWord hnd val) |
Writes a single word. |
(FileIO fileCheckFreeSpace ???) |
I’m not sure how this one works yet. |
(FileIO fileGetCWD ptr) |
Was a separate call in SCI16. |
(FileIO fileValidPath ptr) |
Checks if the given string is a valid path, I guess. |
Wow. So what I did after learning these existed and looking back at the long-since scrapped persistent settings in The Dating Pool was, I added some of these to SCI11+. Specifically, the first four.
It was that or switch to using the File
class exclusively and add wrapper functions for simple value reading and writing to it. But I can honestly say The Dating Pool doesn’t use File
at all.