static int syscall_open(char *filename){ if(filename == NULL || strlen(filename) == 0) return -1; struct thread *cur = thread_current (); struct file_elem *fe, *fe_prev; struct list_elem *le; int fd; fe = filesys_open_file(filename); if(fe == NULL) return -1; if(fe->file == NULL && fe->dir == NULL) { /* Error occured while opening file */ return -1; } // If some files are opened already, fd will be fd of last opened file + 1. if(!list_empty(&cur->open_files)) { le = list_back(&cur->open_files); fe_prev = list_entry(le, struct file_elem, elem); fd = fe_prev->fd + 1; }
void music_sheet_test_play_midi_file() { struct fs_posix fs; fs_posix_init(&fs, "data"); struct file* file = filesys_open_file(&fs.__parent, "./piano_sonata_13_1_(c)oguri.mid", false); struct music_sheet sheet; music_sheet_init(&sheet); music_sheet_load_from_midi_file(&sheet, file); filesys_free(&fs.__parent); struct music_sheet_iter iter; music_sheet_get_iter_by_note_id(&sheet, 0, &iter); struct syn_audioif syn; syn_aif_init(&syn); while (music_sheet_play_next(&sheet, &iter, &syn.__parent)) continue; music_sheet_free(&sheet); syn_aif_free(&syn); }