예제 #1
0
static int loadsample (TCHAR *path, struct drvsample *ds)
{
	struct zfile *f;
	uae_u8 *buf;
	int size;
	TCHAR name[MAX_DPATH];

	f = zfile_fopen (path, _T("rb"), ZFD_NORMAL);
	if (!f) {
		_tcscpy (name, path);
		_tcscat (name, _T(".wav"));
		f = zfile_fopen (name, _T("rb"), ZFD_NORMAL);
		if (!f) {
			write_log (_T("driveclick: can't open '%s' (or '%s')\n"), path, name);
			return 0;
		}
	}
	zfile_fseek (f, 0, SEEK_END);
	size = zfile_ftell (f);
	buf = xmalloc (uae_u8, size);
	zfile_fseek (f, 0, SEEK_SET);
	zfile_fread (buf, size, 1, f);
	zfile_fclose (f);
	ds->len = size;
	ds->p = decodewav (buf, &ds->len);
	xfree (buf);
	return 1;
}
예제 #2
0
int driveclick_loadresource (struct drvsample *sp, int drivetype) {
    int i, ok;
    ok = 1;
    for (i = 0; i < 5; i++) {
        int type = -1;
        int len = -1;
        unsigned char* data = NULL;
        switch(i) {
            case 0:
                type = DS_CLICK;
                data = drive_click_data;
                len = drive_click_data_size;
                break;
            case 1:
                type = DS_SPIN;
                data = drive_spin_data;
                len = drive_spin_data_size;
                break;
            case 2:
                type = DS_SPINND;
                data = drive_spinnd_data;
                len = drive_spinnd_data_size;
                break;
            case 3:
                type = DS_START;
                data = drive_startup_data;
                len = drive_startup_data_size;
                break;
            case 4:
                type = DS_SNATCH;
                data = drive_snatch_data;
                len = drive_snatch_data_size;
                break;
        }
        struct drvsample* s = sp + type;
        //write_log("decode drive click sample %d from %p len %d\n", type,
        //        data, len);
        s->p = decodewav((uae_u8*) data, &len);
        s->len = len;
    }
	return ok;
}
예제 #3
0
static int loadsample (const char *path, struct drvsample *ds)
{
    struct zfile *f;
    uae_u8 *buf;
    int size;

    f = zfile_fopen (path, "rb");
    if (!f) {
	write_log ("driveclick: can't open '%s'\n", path);
	return 0;
    }
    zfile_fseek (f, 0, SEEK_END);
    size = zfile_ftell (f);
    buf = malloc (size);
    zfile_fseek (f, 0, SEEK_SET);
    zfile_fread (buf, size, 1, f);
    zfile_fclose (f);
    ds->len = size;
    ds->p = decodewav (buf, &ds->len);
    free (buf);
    return 1;
}
예제 #4
0
int driveclick_loadresource (struct drvsample *sp, int drivetype)
{
    int type, ok;
    ok = 1;
    for (type = 0; type < DS_END; type++) {
        //int type = -1;
        //int len = -1;
        //unsigned char* data = NULL;
        const char *name = NULL;
        switch(type) {
            case 0:
                //type = DS_CLICK;
                //data = drive_click_data;
                //len = drive_click_data_size;
                name = "drive_click.wav";
                break;
            case 1:
                //type = DS_SPIN;
                //data = drive_spin_data;
                //len = drive_spin_data_size;
                name = "drive_spin.wav";
                break;
            case 2:
                //type = DS_SPINND;
                //data = drive_spinnd_data;
                //len = drive_spinnd_data_size;
                name = "drive_spinnd.wav";
                break;
            case 3:
                //type = DS_START;
                //data = drive_startup_data;
                //len = drive_startup_data_size;
                name = "drive_startup.wav";
                break;
            case 4:
                //type = DS_SNATCH;
                //data = drive_snatch_data;
                //len = drive_snatch_data_size;
                name = "drive_snatch.wav";
                break;
        }

        if (!name) {
            continue;
        }

        char *path = g_build_filename(g_driveclick_path, name, NULL);
        int64_t size = fs_path_get_size(path);
        if (size >= 0) {
            int len = (int) size;
            void *buffer = g_malloc(len);
            FILE* f = g_fopen(path, "rb");
            int read = fread(buffer, 1, len, f);
            if (read == size) {
                struct drvsample* s = sp + type;
                //write_log("decode drive click sample %d from %p len %d\n",
                //        type, data, len);
                s->p = decodewav((uae_u8*) buffer, &len);
                s->len = len;
            }
            g_free(buffer);
        }
        g_free(path);
    }
    return ok;
}