Do you understand what a packfile really is? Basically, it's just a plain vanilla libc FILE*, with a few extra features:
- PACKFILE supports endian-safe reading across all supported platforms. Using pack_mgetw() for example will correctly load a Motorola-aligned short from the same file on all platforms.
- PACKFILE supports compressed file i/o, using a special "magic" byte sequence at the start of a file, and the appropriate flag when opening a file. After opening a compressed file, the PACKFILE* pointer will behave like a normal one, except that the data is compressed on disk.
A DATAFILE is allegro's implementation of a resource file. It is organized in chunks, each of which can hold an object of various types. The datafile routines internally use the packfile API for i/o, but you don't need to know this.
So for all datafiles (files that you created using grabber or dat), use the datafile api. For all other files, use the packfile api.