1/*
2 * Copyright 2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include <MidiSettings.h>
7
8#include <File.h>
9#include <FindDirectory.h>
10#include <Path.h>
11
12#include <driver_settings.h>
13
14#include <stdio.h>
15#include <stdlib.h>
16#include <string.h>
17
18#define SETTINGS_FILE "Media/midi_settings"
19
20namespace BPrivate {
21
22status_t
23read_midi_settings(struct midi_settings* settings)
24{
25	if (settings == NULL)
26		return B_ERROR;
27
28	BPath path;
29	status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
30	if (status != B_OK)
31		return status;
32
33	path.Append(SETTINGS_FILE);
34	void* handle = load_driver_settings(path.Path());
35	if (handle == NULL)
36		return B_ERROR;
37
38	const char* soundfont = get_driver_parameter(handle, "soundfont", NULL,
39		NULL);
40	if (soundfont == NULL) {
41		unload_driver_settings(handle);
42		return B_ERROR;
43	}
44	strlcpy(settings->soundfont_file, soundfont,
45		sizeof(settings->soundfont_file));
46
47	unload_driver_settings(handle);
48	return B_OK;
49}
50
51
52status_t
53write_midi_settings(struct midi_settings settings)
54{
55	BPath path;
56	status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
57	if (status != B_OK)
58		return status;
59
60	path.Append(SETTINGS_FILE);
61
62	BFile file;
63	if (file.SetTo(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE)
64		!= B_OK)
65		return B_ERROR;
66
67	char buffer[B_FILE_NAME_LENGTH + 128];
68	snprintf(buffer, sizeof(buffer), "# Midi\n\tsoundfont \"%s\"\n",
69			settings.soundfont_file);
70
71	size_t bufferSize = strlen(buffer);
72	if (file.InitCheck() != B_OK
73		|| file.Write(buffer, bufferSize) != (ssize_t)bufferSize)
74		return B_ERROR;
75
76	return B_OK;
77}
78
79}
80