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