Table of Contents


The device_getinfo functions are used by MESS to get additional info about the devices used in a system. They are generally located in the systems/<drivername>.c file.


All data that you want to return must be copied into the info union. A switch is used to selected the info MESS wants. Possible states are:


The type of the device. Possible values are:


Boolean value whether this device can read data. Possible values:


Boolean value whether this device can write data. Possible values:


Boolean value whether new files can be created for use with this device or not. Possible values:


The number of devices of this type this system can possibly use (example: 2 floppy drives).


This is a pointer to the function which is called when the user mounts a new file for use with this device.


This is a comma separated list representing the possible file extensions for this device.


This could be the function for a floppy drive:

static DEVICE_GET_INFO( mydriver_floppy )
    /* floppy */
        /* --- the following bits of info are returned as 64-bit signed integers --- */
        case DEVINFO_INT_IMAGE_TYPE:            info->i = IO_FLOPPY; break;
        case DEVINFO_INT_IMAGE_READABLE:        info->i = 1; break;
        case DEVINFO_INT_IMAGE_WRITEABLE:       info->i = 1; break;
        case DEVINFO_INT_IMAGE_CREATABLE:       info->i = 1; break;
        case DEVINFO_INT_IMAGE_CREATE_OPTCOUNT: info->i = 2; break;
        /* --- the following bits of info are returned as pointers to data or functions --- */
        case DEVINFO_FCT_START:                 info->start = DEVICE_START_NAME(mydriver_floppy); break;
        case DEVINFO_FCT_IMAGE_LOAD:            info->f = (genf *) DEVICE_IMAGE_LOAD_NAME(mydriver_floppy); break;
        case DEVINFO_FCT_IMAGE_UNLOAD:          info->f = (genf *) DEVICE_IMAGE_UNLOAD_NAME(mydriver_floppy); break;
        /* --- the following bits of info are returned as NULL-terminated strings --- */
        case DEVINFO_STR_NAME:                  strcpy(info->s, "Floppy Disk"); break;
        case DEVINFO_STR_IMAGE_FILE_EXTENSIONS: strcpy(info->s, "dsk"); break;

In this example, we create a device of type IO_FLOPPY, that is readable, writable and creatable. The system supports two floppy drives. The function device_load_mydriver_floppy is called when the user mounts a new file (we don't actually write this function as is, we use the macro DEVICE_LOAD). The file extension is just dsk.