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
20 namespace BPrivate {
21
22 status_t
read_midi_settings(struct midi_settings * settings)23 read_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
52 status_t
write_midi_settings(struct midi_settings settings)53 write_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