Construct a list of available PlayIt drivers

=> | R0 = | reason code
| R1 = | pointer to name of directory to scan
| R2 = | pointer to word aligned buffer to put information
| R3 = | unused on entry
| R4 = | start index (0 for first read)
| R5 = | size of buffer at R2

<= | R0-R2 | preserved
| R3 = | number of drivers read (1 or 0)
| R4 = | number of next driver to read (-1 if finished)

This call is similar to OS_GBPB 9-11 except that the files matched are those identified (by contents) to be PlayIt drivers. The directory given in R1 is scanned starting from the file numbered R4 (as OS_GBPB). If R3 is zero on exit then no more drivers were found, R4 will be -1 and the buffer is left unchanged. If R3 is one then the buffer contains the requested information and R4 points to the next file to scan from (which is not necessarily a driver). R3 will only be zero when there are no more files (ie R4 will also be -1).

The reason code specified in R0 are:

0 | return filename only
1 | return filename & driver name
2 | return filename, driver name and description
3 | filename, driver name, description and version

The format of the data returned (in the block pointed to by R2) is:

R2+0 | driver ID number (negative if driver reports it won't work)
R2+4 | offset from R2 of file leaf name (ie 8)
R2+5 | offset from R2 of driver name
R2+6 | offset from R2 of driver description
R2+7 | offset from R2 of driver version string
R2+8 | null-terminated filename
? | other null terminated strings if requested
R0 (the reason code) controls how much information will be returned. The buffer must be at least 8 bytes as the first two words are written unconditionally. The other strings will only be written if space permits. The offset for the string will be zero if the string was not written (if it didn't fit or it wasn't asked for).

Some example psudo-code shows the general structure of a loop using this call.

[ Parent ] [ Manual root ]