Code

code style, indent with tabs IV
authorMax Kellermann <max@duempel.org>
Wed, 17 Sep 2008 19:08:06 +0000 (21:08 +0200)
committerMax Kellermann <max@duempel.org>
Wed, 17 Sep 2008 19:08:06 +0000 (21:08 +0200)
Follow the same code style als MPD itself.

src/command.c
src/libmpdclient.c
src/main.c
src/screen.c
src/screen_artist.c

index 23c15b366b33bbbc6d2306cc48b0e130ff1de487..881df278a241f58ac6af0f83485441596fa2af68 100644 (file)
@@ -397,61 +397,61 @@ find_key_command(int key, command_definition_t *c)
        return CMD_NONE;
 }
 
-command_t 
+command_t
 get_key_command(int key)
 {
-  return find_key_command(key, cmds);
+       return find_key_command(key, cmds);
 }
 
 int
 my_wgetch(WINDOW *w)
 {
-  int c;
+       int c;
 
-  c = wgetch(w);
+       c = wgetch(w);
 
-  /* handle resize event */
-  if( c==KEY_RESIZE )
-    screen_resize();
+       /* handle resize event */
+       if (c == KEY_RESIZE)
+               screen_resize();
 
 #ifdef ENABLE_RAW_MODE
-  /* handle SIGSTOP (Ctrl-Z) */
-  if( c==26 || c==407 )
-    sigstop();
-  /* handle SIGINT (Ctrl-C) */
-  if( c==3 )
-    exit(EXIT_SUCCESS);
+       /* handle SIGSTOP (Ctrl-Z) */
+       if (c == 26 || c == 407)
+               sigstop();
+       /* handle SIGINT (Ctrl-C) */
+       if (c == 3)
+               exit(EXIT_SUCCESS);
 #endif
 
-  return c;
+       return c;
 }
 
 command_t
 get_keyboard_command_with_timeout(int ms)
 {
-  int key;
+       int key;
 
-  if( ms != SCREEN_TIMEOUT)
-    timeout(ms);
-  key = my_wgetch(stdscr);
-  if( ms != SCREEN_TIMEOUT)
-    timeout(SCREEN_TIMEOUT);
+       if (ms != SCREEN_TIMEOUT)
+               timeout(ms);
+       key = my_wgetch(stdscr);
+       if (ms != SCREEN_TIMEOUT)
+               timeout(SCREEN_TIMEOUT);
 
-  if( key==ERR )
-    return CMD_NONE;
+       if (key == ERR)
+               return CMD_NONE;
 
 #ifdef HAVE_GETMOUSE
-  if( key==KEY_MOUSE )
-    return CMD_MOUSE_EVENT;
+       if (key == KEY_MOUSE)
+               return CMD_MOUSE_EVENT;
 #endif
 
-  return get_key_command(key);
+       return get_key_command(key);
 }
 
 command_t
 get_keyboard_command(void)
 {
-  return get_keyboard_command_with_timeout(SCREEN_TIMEOUT);
+       return get_keyboard_command_with_timeout(SCREEN_TIMEOUT);
 }
 
 int
index ae4bd9c24134933a90936854bb49bea9ffd6c83c..0733ccad101973f76f377c2f3b9ac925366eb7d9 100644 (file)
@@ -88,7 +88,7 @@ static int winsock_dll_error(mpd_Connection *connection)
                        LOBYTE(wsaData.wVersion) != 2 ||
                        HIBYTE(wsaData.wVersion) != 2 ) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "Could not find usable WinSock DLL.");
+                        "Could not find usable WinSock DLL.");
                connection->error = MPD_ERROR_SYSTEM;
                return 1;
        }
@@ -142,7 +142,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
 
        if (error) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "host \"%s\" not found: %s",host, gai_strerror(error));
+                        "host \"%s\" not found: %s",host, gai_strerror(error));
                connection->error = MPD_ERROR_UNKHOST;
                return -1;
        }
@@ -173,8 +173,8 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
 
        if (connection->sock < 0) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "problems connecting to \"%s\" on port"
-                               " %i: %s",host,port, strerror(errno));
+                        "problems connecting to \"%s\" on port"
+                        " %i: %s",host,port, strerror(errno));
                connection->error = MPD_ERROR_CONNPORT;
 
                return -1;
@@ -193,7 +193,7 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
 
        if(!(he=gethostbyname(host))) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "host \"%s\" not found",host);
+                        "host \"%s\" not found",host);
                connection->error = MPD_ERROR_UNKHOST;
                return -1;
        }
@@ -228,8 +228,8 @@ static int mpd_connect(mpd_Connection * connection, const char * host, int port,
        /* connect stuff */
        if (do_connect_fail(connection, dest, destlen)) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "problems connecting to \"%s\" on port"
-                               " %i",host,port);
+                        "problems connecting to \"%s\" on port"
+                        " %i",host,port);
                connection->error = MPD_ERROR_CONNPORT;
                return -1;
        }
@@ -307,8 +307,8 @@ static int mpd_parseWelcome(mpd_Connection * connection, const char * host, int
 
        if(strncmp(output,MPD_WELCOME_MESSAGE,strlen(MPD_WELCOME_MESSAGE))) {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                               "mpd not running on port %i on host \"%s\"",
-                               port,host);
+                        "mpd not running on port %i on host \"%s\"",
+                        port,host);
                connection->error = MPD_ERROR_NOTMPD;
                return 1;
        }
@@ -419,13 +419,13 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
                if((err = select(connection->sock+1,&fds,NULL,NULL,&tv)) == 1) {
                        int readed;
                        readed = recv(connection->sock,
-                                       &(connection->buffer[connection->buflen]),
-                                       MPD_BUFFER_MAX_LENGTH-connection->buflen,0);
+                                     &(connection->buffer[connection->buflen]),
+                                     MPD_BUFFER_MAX_LENGTH-connection->buflen,0);
                        if(readed<=0) {
                                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                                               "problems getting a response from"
-                                               " \"%s\" on port %i : %s",host,
-                                               port, strerror(errno));
+                                        "problems getting a response from"
+                                        " \"%s\" on port %i : %s",host,
+                                        port, strerror(errno));
                                connection->error = MPD_ERROR_NORESPONSE;
                                return connection;
                        }
@@ -433,19 +433,19 @@ mpd_Connection * mpd_newConnection(const char * host, int port, float timeout) {
                        connection->buffer[connection->buflen] = '\0';
                }
                else if(err<0) {
-                       if (SELECT_ERRNO_IGNORE)
+                       if (SELECT_ERRNO_IGNORE)
                                continue;
                        snprintf(connection->errorStr,
-                                       MPD_BUFFER_MAX_LENGTH,
-                                       "problems connecting to \"%s\" on port"
-                                       " %i",host,port);
+                                MPD_BUFFER_MAX_LENGTH,
+                                "problems connecting to \"%s\" on port"
+                                " %i",host,port);
                        connection->error = MPD_ERROR_CONNPORT;
                        return connection;
                }
                else {
                        snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                                       "timeout in attempting to get a response from"
-                                       " \"%s\" on port %i",host,port);
+                                "timeout in attempting to get a response from"
+                                " \"%s\" on port %i",host,port);
                        connection->error = MPD_ERROR_NORESPONSE;
                        return connection;
                }
@@ -485,8 +485,9 @@ static void mpd_executeCommand(mpd_Connection *connection,
        const char *commandPtr = command;
        int commandLen = strlen(command);
 
-       if(!connection->doneProcessing && !connection->commandList) {
-               strcpy(connection->errorStr,"not done processing current command");
+       if (!connection->doneProcessing && !connection->commandList) {
+               strcpy(connection->errorStr,
+                      "not done processing current command");
                connection->error = 1;
                return;
        }
@@ -547,27 +548,24 @@ static void mpd_getNextReturnElement(mpd_Connection * connection) {
        if(connection->returnElement) mpd_freeReturnElement(connection->returnElement);
        connection->returnElement = NULL;
 
-       if(connection->doneProcessing || (connection->listOks &&
-          connection->doneListOk))
-       {
+       if (connection->doneProcessing ||
+           (connection->listOks && connection->doneListOk)) {
                strcpy(connection->errorStr,"already done processing current command");
                connection->error = 1;
                return;
        }
 
        bufferCheck = connection->buffer+connection->bufstart;
-       while(connection->bufstart>=connection->buflen ||
-                       !(rt = strchr(bufferCheck,'\n'))) {
-               if(connection->buflen>=MPD_BUFFER_MAX_LENGTH) {
+       while (connection->bufstart >= connection->buflen ||
+              !(rt = strchr(bufferCheck, '\n'))) {
+               if (connection->buflen >= MPD_BUFFER_MAX_LENGTH) {
                        memmove(connection->buffer,
-                                       connection->buffer+
-                                       connection->bufstart,
-                                       connection->buflen-
-                                       connection->bufstart+1);
-                       connection->buflen-=connection->bufstart;
+                               connection->buffer + connection->bufstart,
+                               connection->buflen - connection->bufstart + 1);
+                       connection->buflen -= connection->bufstart;
                        connection->bufstart = 0;
                }
-               if(connection->buflen>=MPD_BUFFER_MAX_LENGTH) {
+               if (connection->buflen >= MPD_BUFFER_MAX_LENGTH) {
                        strcpy(connection->errorStr,"buffer overrun");
                        connection->error = MPD_ERROR_BUFFEROVERRUN;
                        connection->doneProcessing = 1;
@@ -581,9 +579,9 @@ static void mpd_getNextReturnElement(mpd_Connection * connection) {
                FD_SET(connection->sock,&fds);
                if((err = select(connection->sock+1,&fds,NULL,NULL,&tv) == 1)) {
                        readed = recv(connection->sock,
-                                       connection->buffer+connection->buflen,
-                                       MPD_BUFFER_MAX_LENGTH-connection->buflen,
-                                       MSG_DONTWAIT);
+                                     connection->buffer+connection->buflen,
+                                     MPD_BUFFER_MAX_LENGTH-connection->buflen,
+                                     MSG_DONTWAIT);
                        if(readed<0 && SENDRECV_ERRNO_IGNORE) {
                                continue;
                        }
@@ -671,7 +669,7 @@ static void mpd_getNextReturnElement(mpd_Connection * connection) {
        }
        else {
                snprintf(connection->errorStr,MPD_BUFFER_MAX_LENGTH,
-                                       "error parsing: %s:%s",name,value);
+                        "error parsing: %s:%s",name,value);
                connection->errorStr[MPD_BUFFER_MAX_LENGTH] = '\0';
                connection->error = 1;
        }
index c2d752ffbed5c03af0442ac87ed0ae3ec557ff04..a0ff344610af15b40d0407515004cae737eae60a 100644 (file)
 
 #define BUFSIZE 1024
 
-static mpdclient_t   *mpd = NULL;
+static mpdclient_t *mpd = NULL;
 static gboolean connected = FALSE;
-static GTimer      *timer = NULL;
+static GTimer *timer = NULL;
 
 static const gchar *
 error_msg(const gchar *msg)
 {
-  gchar *p;
+       gchar *p;
 
-  if( (p=strchr(msg, '}' )) == NULL )
-    return msg;
-  while( p && *p && (*p=='}' || *p==' ') )
-    p++;
+       if ((p = strchr(msg, '}')) == NULL)
+               return msg;
 
-  return p;
+       while (p && *p && (*p=='}' || *p==' '))
+               p++;
+
+       return p;
 }
 
 static void
@@ -79,49 +80,48 @@ error_callback(mpd_unused mpdclient_t *c, gint error, const gchar *msg)
 static void
 update_xterm_title(void)
 {
-  static char title[BUFSIZE];
-  char tmp[BUFSIZE];
-  mpd_Status *status = NULL;
-  mpd_Song *song = NULL;
-
-  if( mpd )
-    {
-      status = mpd->status;
-      song = mpd->song;
-    }
+       static char title[BUFSIZE];
+       char tmp[BUFSIZE];
+       mpd_Status *status = NULL;
+       mpd_Song *song = NULL;
+
+       if (mpd) {
+               status = mpd->status;
+               song = mpd->song;
+       }
 
-  if(options.xterm_title_format && status && song && IS_PLAYING(status->state))
-    {
-      strfsong(tmp, BUFSIZE, options.xterm_title_format, song);
-    }
-  else
-    g_strlcpy(tmp, PACKAGE " version " VERSION, BUFSIZE);
+       if (options.xterm_title_format && status && song &&
+           IS_PLAYING(status->state))
+               strfsong(tmp, BUFSIZE, options.xterm_title_format, song);
+       else
+               g_strlcpy(tmp, PACKAGE " version " VERSION, BUFSIZE);
 
-  if( strncmp(title,tmp,BUFSIZE) )
-    {
-      g_strlcpy(title, tmp, BUFSIZE);
-      set_xterm_title("%s", title);
-    }
+       if (strncmp(title, tmp, BUFSIZE)) {
+               g_strlcpy(title, tmp, BUFSIZE);
+               set_xterm_title("%s", title);
+       }
 }
 
 static void
 exit_and_cleanup(void)
 {
-  screen_exit();
-  set_xterm_title("");
-  printf("\n");
-  if( mpd )
-    {
-      mpdclient_disconnect(mpd);
-      mpdclient_free(mpd);
-    }
-  g_free(options.host);
-  g_free(options.password);
-  g_free(options.list_format);
-  g_free(options.status_format);
-  g_free(options.scroll_sep);
-  if( timer )
-    g_timer_destroy(timer);
+       screen_exit();
+       set_xterm_title("");
+       printf("\n");
+
+       if (mpd) {
+               mpdclient_disconnect(mpd);
+               mpdclient_free(mpd);
+       }
+
+       g_free(options.host);
+       g_free(options.password);
+       g_free(options.list_format);
+       g_free(options.status_format);
+       g_free(options.scroll_sep);
+
+       if (timer)
+               g_timer_destroy(timer);
 }
 
 static void
@@ -212,37 +212,37 @@ main(int argc, const char *argv[])
        options_parse(argc, argv);
 
        /* setup signal behavior - SIGINT */
-       sigemptyset( &act.sa_mask );
-       act.sa_flags    = 0;
+       sigemptyset(&act.sa_mask);
+       act.sa_flags = 0;
        act.sa_handler = catch_sigint;
-       if( sigaction(SIGINT, &act, NULL)<0 ) {
+       if (sigaction(SIGINT, &act, NULL) < 0) {
                perror("signal");
                exit(EXIT_FAILURE);
        }
 
        /* setup signal behavior - SIGTERM */
-       sigemptyset( &act.sa_mask );
-       act.sa_flags    = 0;
+       sigemptyset(&act.sa_mask);
+       act.sa_flags = 0;
        act.sa_handler = catch_sigint;
-       if( sigaction(SIGTERM, &act, NULL)<0 ) {
+       if (sigaction(SIGTERM, &act, NULL) < 0) {
                perror("sigaction()");
                exit(EXIT_FAILURE);
        }
 
        /* setup signal behavior - SIGCONT */
-       sigemptyset( &act.sa_mask );
-       act.sa_flags    = 0;
+       sigemptyset(&act.sa_mask);
+       act.sa_flags = 0;
        act.sa_handler = catch_sigcont;
-       if( sigaction(SIGCONT, &act, NULL)<0 ) {
+       if (sigaction(SIGCONT, &act, NULL) < 0) {
                perror("sigaction(SIGCONT)");
                exit(EXIT_FAILURE);
        }
 
        /* setup signal behaviour - SIGHUP*/
-       sigemptyset( &act.sa_mask );
-       act.sa_flags    = 0;
+       sigemptyset(&act.sa_mask);
+       act.sa_flags = 0;
        act.sa_handler = catch_sigint;
-       if( sigaction(SIGHUP, &act, NULL)<0 ) {
+       if (sigaction(SIGHUP, &act, NULL) < 0) {
                perror("sigaction(SIGHUP)");
                exit(EXIT_FAILURE);
        }
index 276500bd4b57e31bcf600d3106e896d2e511cb78..b6e2b7b79cc2c846192642902329391619f6f905 100644 (file)
@@ -543,15 +543,15 @@ ncurses_init(void)
        timeout(SCREEN_TIMEOUT);
        /* initialize mouse support */
 #ifdef HAVE_GETMOUSE
-       if( options.enable_mouse )
+       if (options.enable_mouse)
                mousemask(ALL_MOUSE_EVENTS, NULL);
 #endif
 
-       if( COLS<SCREEN_MIN_COLS || LINES<SCREEN_MIN_ROWS )
-               {
-                       fprintf(stderr, _("Error: Screen to small!\n"));
-                       exit(EXIT_FAILURE);
-               }
+       if (COLS < SCREEN_MIN_COLS || LINES < SCREEN_MIN_ROWS) {
+               fprintf(stderr, _("Error: Screen to small!\n"));
+               exit(EXIT_FAILURE);
+       }
+
        screen.mode = 0;
        screen.cols = COLS;
        screen.rows = LINES;
@@ -604,16 +604,15 @@ ncurses_init(void)
        leaveok(screen.status_window.w, FALSE);
        keypad(screen.status_window.w, TRUE);
 
-       if( options.enable_colors )
-               {
-                       /* set background attributes */
-                       wbkgd(stdscr, COLOR_PAIR(COLOR_LIST));
-                       wbkgd(screen.main_window.w,     COLOR_PAIR(COLOR_LIST));
-                       wbkgd(screen.top_window.w,      COLOR_PAIR(COLOR_TITLE));
-                       wbkgd(screen.progress_window.w, COLOR_PAIR(COLOR_PROGRESSBAR));
-                       wbkgd(screen.status_window.w,   COLOR_PAIR(COLOR_STATUS));
-                       colors_use(screen.progress_window.w, COLOR_PROGRESSBAR);
-               }
+       if (options.enable_colors) {
+               /* set background attributes */
+               wbkgd(stdscr, COLOR_PAIR(COLOR_LIST));
+               wbkgd(screen.main_window.w,     COLOR_PAIR(COLOR_LIST));
+               wbkgd(screen.top_window.w,      COLOR_PAIR(COLOR_TITLE));
+               wbkgd(screen.progress_window.w, COLOR_PAIR(COLOR_PROGRESSBAR));
+               wbkgd(screen.status_window.w,   COLOR_PAIR(COLOR_STATUS));
+               colors_use(screen.progress_window.w, COLOR_PROGRESSBAR);
+       }
 
        refresh();
 }
index eb7b2e5d468ebb3e57c5f39e561a40a8aef7ecb7..71f48514b53cb3d72bb5eb27f1b7a20abc3924c3 100644 (file)
@@ -54,176 +54,174 @@ static list_window_state_t *lw_state = NULL;
 static gint
 compare_utf8(gconstpointer s1, gconstpointer s2)
 {
-  char *key1, *key2;
-  int n;
-
-  key1 = g_utf8_collate_key(s1,-1);
-  key2 = g_utf8_collate_key(s2,-1);
-  n = strcmp(key1,key2);
-  g_free(key1);
-  g_free(key2);
-  return n;
+       char *key1, *key2;
+       int n;
+
+       key1 = g_utf8_collate_key(s1,-1);
+       key2 = g_utf8_collate_key(s2,-1);
+       n = strcmp(key1,key2);
+       g_free(key1);
+       g_free(key2);
+       return n;
 }
 
 /* list_window callback */
 static char *
 artist_lw_callback(int index, int *highlight, void *data)
 {
-  static char buf[BUFSIZE];
-  char *str, *str_utf8;
-  
-  if( (str_utf8=(char *) g_list_nth_data(metalist,index))==NULL )
-    return NULL;
+       static char buf[BUFSIZE];
+       char *str, *str_utf8;
 
-  str = utf8_to_locale(str_utf8);
-  g_snprintf(buf, BUFSIZE, "[%s]", str);
-  g_free(str);
+       if ((str_utf8=(char *) g_list_nth_data(metalist,index)) == NULL)
+               return NULL;
 
-  return buf;
+       str = utf8_to_locale(str_utf8);
+       g_snprintf(buf, BUFSIZE, "[%s]", str);
+       g_free(str);
+
+       return buf;
 }
 
 /* the playlist have been updated -> fix highlights */
-static void 
+static void
 playlist_changed_callback(mpdclient_t *c, int event, gpointer data)
 {
-  if( filelist==NULL )
-    return;
-  D("screen_artist.c> playlist_callback() [%d]\n", event);
-  switch(event)
-    {
-    case PLAYLIST_EVENT_CLEAR:
-      clear_highlights(filelist);
-      break;
-    default:
-      sync_highlights(c, filelist);
-      break;
-    }
+       if (filelist == NULL)
+               return;
+
+       D("screen_artist.c> playlist_callback() [%d]\n", event);
+       switch(event) {
+       case PLAYLIST_EVENT_CLEAR:
+               clear_highlights(filelist);
+               break;
+       default:
+               sync_highlights(c, filelist);
+               break;
+       }
 }
 
 /* fetch artists/albums/songs from mpd */
 static void
 update_metalist(mpdclient_t *c, char *m_artist, char *m_album)
 {
-  g_free(artist);
-  g_free(album);
-  artist = NULL;
-  album = NULL;
-  if( metalist )
-    metalist = string_list_free(metalist);
-  if (filelist ) {
-    mpdclient_remove_playlist_callback(c, playlist_changed_callback);
-    filelist = mpdclient_filelist_free(filelist);
-  }
-  if( m_album ) /* retreive songs... */
-    {
-      artist = m_artist;
-      album = m_album;
-      if( album[0] == 0 )
-       {
-         album = g_strdup(_("All tracks"));
-         filelist = mpdclient_filelist_search_utf8(c,  
-                                                   TRUE,
-                                                   MPD_TABLE_ARTIST,
-                                                   artist);
+       g_free(artist);
+       g_free(album);
+       artist = NULL;
+       album = NULL;
+
+       if (metalist)
+               metalist = string_list_free(metalist);
+       if (filelist) {
+               mpdclient_remove_playlist_callback(c, playlist_changed_callback);
+               filelist = mpdclient_filelist_free(filelist);
        }
-      else
-       filelist = mpdclient_filelist_search_utf8(c,  
-                                                 TRUE,
-                                                 MPD_TABLE_ALBUM,
-                                                 album);
-      /* add a dummy entry for ".." */
-      filelist_entry_t *entry = g_malloc0(sizeof(filelist_entry_t));
-      entry->entity = NULL;
-      filelist->list = g_list_insert(filelist->list, entry, 0);
-      filelist->length++;
-      /* install playlist callback and fix highlights */
-      sync_highlights(c, filelist);
-      mpdclient_install_playlist_callback(c, playlist_changed_callback);
-      mode = LIST_SONGS;
-    }
-  else if( m_artist ) /* retreive albums... */
-    {
-      artist = m_artist;
-      metalist = mpdclient_get_albums_utf8(c, m_artist);
-      /* sort list */
-      metalist = g_list_sort(metalist, compare_utf8);
-      /* add a dummy entry for ".." */
-      metalist = g_list_insert(metalist, g_strdup(".."), 0);
-      /* add a dummy entry for all songs */
-      metalist = g_list_insert(metalist, g_strdup(_("All tracks")), -1);
-      mode = LIST_ALBUMS;
-    }
-  else /* retreive artists... */
-    {
-      metalist = mpdclient_get_artists_utf8(c);
-      /* sort list */
-      metalist = g_list_sort(metalist, compare_utf8);
-      mode = LIST_ARTISTS;
-    }
-  metalist_length = g_list_length(metalist);
-  lw->clear = TRUE;
+       if (m_album) {
+               /* retreive songs... */
+
+               artist = m_artist;
+               album = m_album;
+               if (album[0] == 0) {
+                       album = g_strdup(_("All tracks"));
+                       filelist = mpdclient_filelist_search_utf8(c,
+                                                                 TRUE,
+                                                                 MPD_TABLE_ARTIST,
+                                                                 artist);
+               } else
+                       filelist = mpdclient_filelist_search_utf8(c,
+                                                                 TRUE,
+                                                                 MPD_TABLE_ALBUM,
+                                                                 album);
+               /* add a dummy entry for ".." */
+               filelist_entry_t *entry = g_malloc0(sizeof(filelist_entry_t));
+               entry->entity = NULL;
+               filelist->list = g_list_insert(filelist->list, entry, 0);
+               filelist->length++;
+               /* install playlist callback and fix highlights */
+               sync_highlights(c, filelist);
+               mpdclient_install_playlist_callback(c, playlist_changed_callback);
+               mode = LIST_SONGS;
+       } else if (m_artist) {
+               /* retreive albums... */
+
+               artist = m_artist;
+               metalist = mpdclient_get_albums_utf8(c, m_artist);
+               /* sort list */
+               metalist = g_list_sort(metalist, compare_utf8);
+               /* add a dummy entry for ".." */
+               metalist = g_list_insert(metalist, g_strdup(".."), 0);
+               /* add a dummy entry for all songs */
+               metalist = g_list_insert(metalist, g_strdup(_("All tracks")), -1);
+               mode = LIST_ALBUMS;
+       } else {
+               /* retreive artists... */
+
+               metalist = mpdclient_get_artists_utf8(c);
+               /* sort list */
+               metalist = g_list_sort(metalist, compare_utf8);
+               mode = LIST_ARTISTS;
+       }
+       metalist_length = g_list_length(metalist);
+       lw->clear = TRUE;
 }
 
 /* db updated */
-static void 
+static void
 browse_callback(mpdclient_t *c, int event, gpointer data)
 {
-  switch(event)
-    {
-    case BROWSE_DB_UPDATED:
-      D("screen_artist.c> browse_callback() [BROWSE_DB_UPDATED]\n");
-      lw->clear = 1;
-      lw->repaint = 1;
-      update_metalist(c, g_strdup(artist), g_strdup(album));
-      break;
-    default:
-      break;
-    }
+       switch(event) {
+       case BROWSE_DB_UPDATED:
+               D("screen_artist.c> browse_callback() [BROWSE_DB_UPDATED]\n");
+               lw->clear = 1;
+               lw->repaint = 1;
+               update_metalist(c, g_strdup(artist), g_strdup(album));
+               break;
+       default:
+               break;
+       }
 }
 
 static void
 init(WINDOW *w, int cols, int rows)
 {
-  lw = list_window_init(w, cols, rows);
-  lw_state = list_window_init_state();
-  artist = NULL;
-  album = NULL;
+       lw = list_window_init(w, cols, rows);
+       lw_state = list_window_init_state();
+       artist = NULL;
+       album = NULL;
 }
 
 static void
 quit(void)
 {
-  if( filelist )
-    filelist = mpdclient_filelist_free(filelist);
-  if( metalist )
-    metalist = string_list_free(metalist);
-  g_free(artist);
-  g_free(album);
-  artist = NULL;
-  album = NULL;
-  lw = list_window_free(lw);  
-  lw_state = list_window_free_state(lw_state);
+       if (filelist)
+               filelist = mpdclient_filelist_free(filelist);
+       if (metalist)
+               metalist = string_list_free(metalist);
+       g_free(artist);
+       g_free(album);
+       artist = NULL;
+       album = NULL;
+       lw = list_window_free(lw);
+       lw_state = list_window_free_state(lw_state);
 }
 
 static void
 open(screen_t *screen, mpdclient_t *c)
 {
-  static gboolean callback_installed = FALSE;
-
-  if( metalist==NULL && filelist ==NULL)
-    update_metalist(c, NULL, NULL);
-  if( !callback_installed )
-    {
-      mpdclient_install_browse_callback(c, browse_callback);
-      callback_installed = TRUE;
-    }
+       static gboolean callback_installed = FALSE;
+
+       if (metalist == NULL && filelist == NULL)
+               update_metalist(c, NULL, NULL);
+       if (!callback_installed) {
+               mpdclient_install_browse_callback(c, browse_callback);
+               callback_installed = TRUE;
+       }
 }
 
 static void
 resize(int cols, int rows)
 {
-  lw->cols = cols;
-  lw->rows = rows;
+       lw->cols = cols;
+       lw->rows = rows;
 }
 
 static void
@@ -231,67 +229,56 @@ close(void)
 {
 }
 
-static void 
+static void
 paint(screen_t *screen, mpdclient_t *c)
 {
-  lw->clear = 1;
-  
-  if( filelist )
-    {
-      list_window_paint(lw, browse_lw_callback, (void *) filelist);
-      filelist->updated = FALSE;
-    }
-  else if( metalist )
-    {
-      list_window_paint(lw, artist_lw_callback, (void *) metalist);
-    }
-  else
-    {
-      wmove(lw->w, 0, 0);
-      wclrtobot(lw->w);
-    }
-  wnoutrefresh(lw->w);
+       lw->clear = 1;
+
+       if (filelist) {
+               list_window_paint(lw, browse_lw_callback, (void *) filelist);
+               filelist->updated = FALSE;
+       } else if (metalist) {
+               list_window_paint(lw, artist_lw_callback, (void *) metalist);
+       } else {
+               wmove(lw->w, 0, 0);
+               wclrtobot(lw->w);
+       }
+
+       wnoutrefresh(lw->w);
 }
 
-static void 
+static void
 update(screen_t *screen, mpdclient_t *c)
 {
-  if( filelist && !filelist->updated )
-    {
-      list_window_paint(lw, browse_lw_callback, (void *) filelist);
-    }
-  else if( metalist )
-    {
-      list_window_paint(lw, artist_lw_callback, (void *) metalist);
-    }
-  else
-    {
-      paint(screen, c);
-    }
-  wnoutrefresh(lw->w);
+       if (filelist && !filelist->updated)
+               list_window_paint(lw, browse_lw_callback, (void *) filelist);
+       else if (metalist)
+               list_window_paint(lw, artist_lw_callback, (void *) metalist);
+       else
+               paint(screen, c);
+       wnoutrefresh(lw->w);
 }
 
 static char *
 get_title(char *str, size_t size)
 {
-  char *s1 = artist ? utf8_to_locale(artist) : NULL;
-  char *s2 = album ? utf8_to_locale(album) : NULL;
-
-  switch(mode)
-    {
-    case LIST_ARTISTS:
-      g_snprintf(str, size,  _("Artist: [db browser - EXPERIMENTAL]"));
-      break;
-    case LIST_ALBUMS:
-      g_snprintf(str, size,  _("Artist: %s"), s1);
-      break;
-    case LIST_SONGS:
-      g_snprintf(str, size,  _("Artist: %s - %s"), s1, s2);
-      break;
-    }
-  g_free(s1);
-  g_free(s2);
-  return str;
+       char *s1 = artist ? utf8_to_locale(artist) : NULL;
+       char *s2 = album ? utf8_to_locale(album) : NULL;
+
+       switch(mode) {
+       case LIST_ARTISTS:
+               g_snprintf(str, size,  _("Artist: [db browser - EXPERIMENTAL]"));
+               break;
+       case LIST_ALBUMS:
+               g_snprintf(str, size,  _("Artist: %s"), s1);
+               break;
+       case LIST_SONGS:
+               g_snprintf(str, size,  _("Artist: %s - %s"), s1, s2);
+               break;
+       }
+       g_free(s1);
+       g_free(s2);
+       return str;
 }
 
 static list_window_t *
@@ -303,173 +290,167 @@ get_filelist_window()
 static void
 add_query(mpdclient_t *c, int table, char *filter)
 {
-  char *str;
-  mpdclient_filelist_t *addlist;
-
-  str = utf8_to_locale(filter);
-  if( table== MPD_TABLE_ALBUM )
-    screen_status_printf("Adding album %s...", str);
-  else
-    screen_status_printf("Adding %s...", str);
-  g_free(str);
-  addlist = mpdclient_filelist_search_utf8(c, TRUE, table, filter);
-  if( addlist )
-    {
-      mpdclient_filelist_add_all(c, addlist);
-      addlist = mpdclient_filelist_free(addlist);
-    }
+       char *str;
+       mpdclient_filelist_t *addlist;
+
+       str = utf8_to_locale(filter);
+       if (table== MPD_TABLE_ALBUM)
+               screen_status_printf("Adding album %s...", str);
+       else
+               screen_status_printf("Adding %s...", str);
+       g_free(str);
+
+       addlist = mpdclient_filelist_search_utf8(c, TRUE, table, filter);
+       if (addlist) {
+               mpdclient_filelist_add_all(c, addlist);
+               addlist = mpdclient_filelist_free(addlist);
+       }
 }
 
-static int 
+static int
 artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
 {
-  char *selected;
-
-  switch(cmd)
-    {
-    case CMD_PLAY:
-      switch(mode)
-       {
-       case LIST_ARTISTS:
-         selected = (char *) g_list_nth_data(metalist, lw->selected);
-         update_metalist(c, g_strdup(selected), NULL);
-         list_window_push_state(lw_state,lw); 
-         break;
-       case LIST_ALBUMS:
-         if( lw->selected == 0 )  /* handle ".." */
-           {
-             update_metalist(c, NULL, NULL);
-             list_window_reset(lw);
-             /* restore previous list window state */
-             list_window_pop_state(lw_state,lw); 
-           }
-         else if( lw->selected == metalist_length-1) /* handle "show all" */
-           {
-             update_metalist(c, g_strdup(artist), g_strdup("\0"));
-             list_window_push_state(lw_state,lw); 
-           }
-         else /* select album */
-           {
-             selected = (char *) g_list_nth_data(metalist, lw->selected);
-             update_metalist(c, g_strdup(artist), g_strdup(selected));
-             list_window_push_state(lw_state,lw); 
-           }
-         break;
-       case LIST_SONGS:
-         if( lw->selected==0 )  /* handle ".." */
-           {
-             update_metalist(c, g_strdup(artist), NULL);
-             list_window_reset(lw);
-             /* restore previous list window state */
-             list_window_pop_state(lw_state,lw); 
-           }
-         else
-           browse_handle_enter(screen, c, lw, filelist);
-         break;
+       char *selected;
+
+       switch(cmd) {
+       case CMD_PLAY:
+               switch (mode) {
+               case LIST_ARTISTS:
+                       selected = (char *) g_list_nth_data(metalist, lw->selected);
+                       update_metalist(c, g_strdup(selected), NULL);
+                       list_window_push_state(lw_state,lw);
+                       break;
+
+               case LIST_ALBUMS:
+                       if (lw->selected == 0) {
+                               /* handle ".." */
+
+                               update_metalist(c, NULL, NULL);
+                               list_window_reset(lw);
+                               /* restore previous list window state */
+                               list_window_pop_state(lw_state,lw);
+                       } else if (lw->selected == metalist_length - 1) {
+                               /* handle "show all" */
+                               update_metalist(c, g_strdup(artist), g_strdup("\0"));
+                               list_window_push_state(lw_state,lw);
+                       } else {
+                               /* select album */
+                               selected = (char *) g_list_nth_data(metalist, lw->selected);
+                               update_metalist(c, g_strdup(artist), g_strdup(selected));
+                               list_window_push_state(lw_state,lw);
+                       }
+                       break;
+
+               case LIST_SONGS:
+                       if (lw->selected == 0) {
+                               /* handle ".." */
+
+                               update_metalist(c, g_strdup(artist), NULL);
+                               list_window_reset(lw);
+                               /* restore previous list window state */
+                               list_window_pop_state(lw_state,lw);
+                       } else
+                               browse_handle_enter(screen, c, lw, filelist);
+                       break;
+               }
+               return 1;
+
+
+               /* FIXME? CMD_GO_* handling duplicates code from CMD_PLAY */
+
+       case CMD_GO_PARENT_DIRECTORY:
+               switch (mode) {
+               case LIST_ALBUMS:
+                       update_metalist(c, NULL, NULL);
+                       list_window_reset(lw);
+                       /* restore previous list window state */
+                       list_window_pop_state(lw_state,lw);
+                       break;
+
+               case LIST_SONGS:
+                       update_metalist(c, g_strdup(artist), NULL);
+                       list_window_reset(lw);
+                       /* restore previous list window state */
+                       list_window_pop_state(lw_state,lw);
+                       break;
+               }
+               break;
+
+       case CMD_GO_ROOT_DIRECTORY:
+               switch (mode) {
+               case LIST_ALBUMS:
+               case LIST_SONGS:
+                       update_metalist(c, NULL, NULL);
+                       list_window_reset(lw);
+                       /* restore first list window state (pop while returning true) */
+                       while(list_window_pop_state(lw_state,lw));
+                       break;
+               }
+               break;
+
+       case CMD_SELECT:
+               switch(mode) {
+               case LIST_ARTISTS:
+                       selected = (char *) g_list_nth_data(metalist, lw->selected);
+                       add_query(c, MPD_TABLE_ARTIST, selected);
+                       cmd = CMD_LIST_NEXT; /* continue and select next item... */
+                       break;
+
+               case LIST_ALBUMS:
+                       if (lw->selected && lw->selected == metalist_length - 1)
+                               add_query(c, MPD_TABLE_ARTIST, artist);
+                       else if (lw->selected > 0) {
+                               selected = (char *) g_list_nth_data(metalist, lw->selected);
+                               add_query(c, MPD_TABLE_ALBUM, selected);
+                               cmd = CMD_LIST_NEXT; /* continue and select next item... */
+                       }
+                       break;
+
+               case LIST_SONGS:
+                       if (browse_handle_select(screen, c, lw, filelist) == 0)
+                               /* continue and select next item... */
+                               cmd = CMD_LIST_NEXT;
+                       break;
+               }
+               break;
+
+               /* continue and update... */
+       case CMD_SCREEN_UPDATE:
+               screen->painted = 0;
+               lw->clear = 1;
+               lw->repaint = 1;
+               update_metalist(c, g_strdup(artist), g_strdup(album));
+               screen_status_printf(_("Screen updated!"));
+               return 0;
+
+       case CMD_LIST_FIND:
+       case CMD_LIST_RFIND:
+       case CMD_LIST_FIND_NEXT:
+       case CMD_LIST_RFIND_NEXT:
+               if (filelist)
+                       return screen_find(screen,
+                                          lw, filelist->length,
+                                          cmd, browse_lw_callback, (void *) filelist);
+               else if (metalist)
+                       return screen_find(screen,
+                                          lw, metalist_length,
+                                          cmd, artist_lw_callback, (void *) metalist);
+               else
+                       return 1;
+
+       case CMD_MOUSE_EVENT:
+               return browse_handle_mouse_event(screen,c,lw,filelist);
+
+       default:
+               break;
        }
-      return 1;
-
 
-    /* FIXME? CMD_GO_* handling duplicates code from CMD_PLAY */
-
-    case CMD_GO_PARENT_DIRECTORY:
-      switch(mode)
-       {
-       case LIST_ALBUMS:
-         update_metalist(c, NULL, NULL);
-         list_window_reset(lw);
-         /* restore previous list window state */
-         list_window_pop_state(lw_state,lw);
-         break;
-       case LIST_SONGS:
-         update_metalist(c, g_strdup(artist), NULL);
-         list_window_reset(lw);
-         /* restore previous list window state */
-         list_window_pop_state(lw_state,lw);
-         break;
-       }
-      break;
+       if (filelist)
+               return list_window_cmd(lw, filelist->length, cmd);
+       else if (metalist)
+               return list_window_cmd(lw, metalist_length, cmd);
 
-    case CMD_GO_ROOT_DIRECTORY:
-      switch(mode)
-       {
-       case LIST_ALBUMS:
-       case LIST_SONGS:
-         update_metalist(c, NULL, NULL);
-         list_window_reset(lw);
-         /* restore first list window state (pop while returning true) */
-         while(list_window_pop_state(lw_state,lw));
-         break;
-       }
-      break;
-
-    case CMD_SELECT:
-      switch(mode)
-       {
-       case LIST_ARTISTS:
-         selected = (char *) g_list_nth_data(metalist, lw->selected);
-         add_query(c, MPD_TABLE_ARTIST, selected);
-         cmd = CMD_LIST_NEXT; /* continue and select next item... */
-         break;
-       case LIST_ALBUMS:
-         if( lw->selected && lw->selected == metalist_length-1)
-           {
-             add_query(c, MPD_TABLE_ARTIST, artist);
-           }
-         else if( lw->selected > 0 )
-           {
-             selected = (char *) g_list_nth_data(metalist, lw->selected);
-             add_query(c, MPD_TABLE_ALBUM, selected);
-             cmd = CMD_LIST_NEXT; /* continue and select next item... */
-           }
-         break;
-       case LIST_SONGS:
-         if( browse_handle_select(screen, c, lw, filelist) == 0 )
-           {
-             cmd = CMD_LIST_NEXT; /* continue and select next item... */
-           }
-         break;
-       }
-      break;
-
-      /* continue and update... */
-    case CMD_SCREEN_UPDATE:
-      screen->painted = 0;
-      lw->clear = 1;
-      lw->repaint = 1;
-      update_metalist(c, g_strdup(artist), g_strdup(album));
-      screen_status_printf(_("Screen updated!"));
-      return 0;
-
-    case CMD_LIST_FIND:
-    case CMD_LIST_RFIND:
-    case CMD_LIST_FIND_NEXT:
-    case CMD_LIST_RFIND_NEXT:
-      if( filelist )
-       return screen_find(screen,
-                          lw, filelist->length,
-                          cmd, browse_lw_callback, (void *) filelist);
-      else if ( metalist )
-       return screen_find(screen,
-                          lw, metalist_length,
-                          cmd, artist_lw_callback, (void *) metalist);
-      else
-       return 1;
-
-    case CMD_MOUSE_EVENT:
-      return browse_handle_mouse_event(screen,c,lw,filelist);
-
-    default:
-      break;
-    }
-
-  if( filelist )
-    return list_window_cmd(lw, filelist->length, cmd);
-  else if( metalist )
-    return list_window_cmd(lw, metalist_length, cmd);
-
-  
-  return 0;
+       return 0;
 }
 
 const struct screen_functions screen_artist = {