./hw_at3.c:        music->offset = 0;
./hw_at3.c:        music->resume = 1;
./hw_at3.c:        music->flags = PLAYBACK_CLEANED_UP;
./hw_at3.c:    fd = sceIoOpen(music->file, PSP_O_RDONLY, 0777);
./hw_at3.c:    if (music->resume)
./hw_at3.c:        sceIoLseek32(fd, music->offset, PSP_SEEK_SET);
./hw_at3.c:        size -= music->offset;
./hw_at3.c:        music->resume = 0;
./hw_at3.c:    while( !eof && (music->flags == PLAYBACK_PLAYING) )
./hw_at3.c:        music->offset = data_start;
./hw_at3.c:            sceAudioOutputBlocking(music->audio_id, PSP_AUDIO_VOLUME_MAX*music->volume/100, AT3_OutputBuffer[OutputBuffer_flip] );
./hw_at3.c:    if (music->flags == PLAYBACK_RESET)
./main.c:    sceKernelTerminateDeleteThread(music->mus_thid);
./main.c:    music->omg_count = CountMusicFiles(OMG_AUDIO_DIR);
./main.c:    music->count = CountMusicFiles(config.dirname) + music->omg_count;
./main.c:    music->memid = sceKernelAllocPartitionMemory(1, "PLYLST_MEM", PSP_SMEM_Low, music->count*sizeof(int), NULL);
./main.c:    music->random_played = sceKernelGetBlockHeadAddr(music->memid);
./main.c:    music->offset = 0;
./main.c:	music->resume = 0;
./main.c:    music->pause = PLAYBACK_PAUSE_SONG;
./main.c:	music->change_track = 0;
./main.c:    music->loop = LOOP_NONE;
./main.c:   	music->pl_thid = sceKernelCreateThread("Playlist_Thread", playlist_thread, THREAD_PRIORITY+2, 0x4000, 0, NULL);
./main.c:   	if(music->pl_thid >= 0)
./main.c:   		sceKernelStartThread(music->pl_thid, 0, NULL);
./main.c:    sceKernelTerminateDeleteThread(music->pl_thid); 
./main.c:    memset(music->file, 0, sizeof(music->file));
./main.c:    sceKernelFreePartitionMemory(music->memid);
./main.c:    music->index = 0;
./main.c:    music->random_index = 0;
./main.c:    for(i = 0; i < music->count; i++)
./main.c:        music->random_played[i] = -1; //played file not = to -1
./main.c:        if (music->count)
./main.c:            if (music->random && (music->random_index >= music->count))
./main.c:            if ((!music->resume) && (music->loop != LOOP_SONG)) //not resuming music playback, load a new file
./main.c:                if (music->random)
./main.c:                    music->index = rand()%music->count;
./main.c:                    for(i = music->random_index; i>=0; i--)
./main.c:                        if (music->index == music->random_played[i])//if rand already played, pick a new one and recheck
./main.c:                            music->index = rand()%music->count;
./main.c:                            i = music->random_index;
./main.c:                    music->random_played[music->random_index] = music->index;
./main.c:                    music->random_index++;
./main.c:                    if (music->index >= music->omg_count)
./main.c:                        GetMusicFileName(config.dirname, music->file, music->index - music->omg_count, 0);
./main.c:                        GetMusicFileName(OMG_AUDIO_DIR, music->file, music->index, 0);
./main.c:                    if (music->index >= music->omg_count)
./main.c:                        GetMusicFileName(config.dirname, music->file, music->index - music->omg_count, 0);
./main.c:                        GetMusicFileName(OMG_AUDIO_DIR, music->file, music->index, 0);
./main.c:                    music->index++;
./main.c:                    if (music->index >= music->count)
./main.c:                }//if (music->random)
./main.c:            }//if (!music->resume && music->loop == LOOP_NONE)
./main.c:            music->title[0] = '\0'; //reset so the right title/filename is displayed
./main.c:            if (music->loop == LOOP_IGNORE) //finished changing the track, reset the loop
./main.c:                music->loop = LOOP_SONG;
./main.c:        }//if (music->count)
./main.c:        memcpy(ext, music->file + strlen(music->file) - 4, 5);//get file extension
./main.c:            GetOMGTitle(music->file, music->title);
./main.c:            if (music->pause == PLAYBACK_PAUSE_SONG)
./main.c:                music->pause = PLAYBACK_PAUSED;
./main.c:            while( music->pause == PLAYBACK_PAUSED)
./main.c:                if ((music->change_track == PREV_SONG) || (music->change_track == NEXT_SONG)) 
./main.c:                    if (music->change_track == PREV_SONG)
./main.c:                        music->index -= 2;
./main.c:                        if (music->index < 0)
./main.c:                            music->index += music->count; //allows moving back in a loop
./main.c:            if ( music->change_track != 0)
./main.c:                music->change_track = 0;
./main.c:                music->offset = 0;
./main.c:                music->resume = 0;
./main.c:                if (music->loop == LOOP_SONG)
./main.c:                    music->loop = LOOP_IGNORE;
./main.c:            music->init = 1;
./main.c:            file_type = GetOMGFileType(music->file);
./main.c:        music->flags = PLAYBACK_PLAYING;
./main.c:        music->mus_thid = sceKernelCreateThread("music_thread", music_thread, THREAD_PRIORITY, 0x4000, 0, NULL);
./main.c:        if (music->mus_thid >= 0)
./main.c:            sceKernelStartThread(music->mus_thid, 0, NULL);
./main.c:            if (music->pause == PLAYBACK_PAUSE_SONG)
./main.c:                sceKernelSuspendThread(music->mus_thid);
./main.c:                music->pause = PLAYBACK_PAUSED;
./main.c:            else if (music->pause == PLAYBACK_RESUME_SONG)
./main.c:                sceKernelResumeThread(music->mus_thid);
./main.c:                music->pause = PLAYBACK_PLAYING;
./main.c:            if ((music->change_track == PREV_SONG) || (music->change_track == NEXT_SONG)) 
./main.c:                if (music->change_track == PREV_SONG)
./main.c:                    music->index -= 2;
./main.c:                    if (music->index < 0)
./main.c:                        music->index += music->count; //allows moving back in a loop
./main.c:                music->change_track = 0;
./main.c:                music->offset = 0;
./main.c:                music->resume = 0;
./main.c:                if (music->loop == LOOP_SONG)
./main.c:                    music->loop = LOOP_IGNORE;
./main.c:                music->flags = PLAYBACK_DONE;//signal to the music thread that we are exiting
./main.c:                if (music->pause == PLAYBACK_PAUSED)//resume thread if paused and then repause it 
./main.c:                    sceKernelResumeThread(music->mus_thid);
./main.c:                    music->pause = PLAYBACK_PAUSE_SONG;
./main.c:                while(music->flags != PLAYBACK_CLEANED_UP)
./main.c:                sceKernelTerminateDeleteThread(music->mus_thid);
./main.c:            if (music->flags == PLAYBACK_CLEANED_UP)
./main.c:                sceKernelTerminateDeleteThread(music->mus_thid);
./main.c:    music->is_vsh = 0;
./main.c:    music->mus_thid = -1;
./main.c:    music->init = 0;
./main.c:                if(music->volume<100)//max is 100
./main.c:                    music->volume++;
./main.c:                if(music->volume>0)//min is 0
./main.c:                    music->volume--;
./main.c:                    if (music->pause == PLAYBACK_PAUSED)
./main.c:                        music->pause = PLAYBACK_RESUME_SONG;
./main.c:                    else if (music->pause == PLAYBACK_PLAYING)
./main.c:                        music->pause = PLAYBACK_PAUSE_SONG;
./main.c:                    if(!music->random)
./main.c:                        music->change_track = PREV_SONG;
./main.c:                    music->change_track = NEXT_SONG;
./main.c:                    music->random = !music->random;
./main.c:                    music->change_track = NEXT_SONG;
./main.c:                    if (music->loop == LOOP_NONE)
./main.c:                        music->loop = LOOP_SONG;
./main.c:                    else if((music->loop == LOOP_SONG) || (music->loop == LOOP_IGNORE))
./main.c:                        music->loop = LOOP_NONE;
./main.c:                    if(sceKernelResumeThread(music->mus_thid) != SCE_KERNEL_ERROR_UNKNOWN_THID)
./main.c:                        music->flags = PLAYBACK_DONE;
./main.c:                        while(music->flags != PLAYBACK_CLEANED_UP)
./main.c:                        sceKernelTerminateDeleteThread(music->mus_thid);
./main.c://                        if (music->output2init)//TODO FIX THIS
./main.c:            sprintf(str_buf, "pl_cur:%08X flag:%08X init:%08X mid:%08X ", music->index, music->flags, music->init, music->mus_thid);
./main.c:            sprintf(str_buf, "list:%08X off:%08X", music->count, music->offset);
./main.c:            sceKernelReferThreadStatus(music->mus_thid, &th_info);
./main.c:            sceKernelReferThreadStatus(music->pl_thid, &th_info);
./main.c:                sprintf(str_buf, "mp3:%d:%08X", i, music->deb[i]/* sceAudioChangeChannelConfig(i, 0)*/);
./main.c:            sprintf(str_buf, "mp3:%08X", music->audio_id);
./main.c:            if(music->random)
./main.c:            fname = music->file;
./main.c:                blit_string(0, 33, &music->file[strlen(config.dirname)], 0xffffff, 0x000000);
./main.c:            else if(music->title[0] != 0) //from omgaudio dir, use ID3 TIT2 
./main.c:                blit_string(0, 33, music->title, 0xffffff, 0x000000);
./main.c:                blit_string(0, 33, &music->file[14], 0xffffff, 0x000000); //14 = strlen(OMG_AUDIO_DIR)
./main.c:            if ((music->loop == LOOP_SONG) || (music->loop == LOOP_IGNORE))
./main.c:            sprintf(str_buf, "vol: %d", music->volume);
./main.c:            if (music->pause == PLAYBACK_PAUSED || music->pause == PLAYBACK_PAUSE_SONG)
./main.c:            else if (music->pause == PLAYBACK_PLAYING || music->pause == PLAYBACK_RESUME_SONG)
./main.c:        music->flags = PLAYBACK_RESET;