Binary files git/mc.org/src/mc and git/mc/src/mc differ
--- git/mc.org/src/panel.h	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/panel.h	2009-07-18 21:28:00.000000000 +0200
@@ -58,6 +58,7 @@
     int      split;		/* Split panel to allow two columns */
     int      is_panelized;	/* Flag: special filelisting, can't reload */
     int      frame_size;	/* half or full frame */
+    int      sort_index;    /* Current Sort Index */
     sortfn   *sort_type;	/* Sort type */
     char     *filter;		/* File name filter */
 
--- git/mc.org/src/screen.c	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/screen.c	2009-07-18 21:39:13.000000000 +0200
@@ -792,10 +792,67 @@
     }
 }
 
+/* draw the sort controls and return the remaining place */ 
+static void 
+update_sort_index (WPanel *panel)
+{ 
+    for( panel->sort_index=0; panel->sort_index<SORT_TYPES_TOTAL; panel->sort_index++)
+        if ( (sortfn *)sort_orders[panel->sort_index].sort_fn == (sortfn *)panel->sort_type )
+            break;
+}
+
+/* draw the sort controls and return the remaining place */ 
+static int 
+show_dir_sort (WPanel *panel, int offset)
+{ 
+    int i, numch; 
+    if (!panel->active) 
+	return offset; 
+    //sort_blanks 
+    attrset (NORMAL_COLOR); 
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset)); 
+    addstr (" "); //before buttons
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset+4)); 
+    addstr (" "); //hotlist 
+ 
+    // sort controls 
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset+1)); 
+    addstr (">"); //next sort 
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset+2)); 
+    addstr ("<"); //prev sort
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset+3)); 
+    if(panel->reverse) 
+       addstr ("-"); //reversed sort 
+    else 
+       addstr ("+"); //no reversed sort 
+     
+    //sort order display 
+    update_sort_index(panel);
+    //get name length 
+    numch = 0; 
+    for(i=0;i<12&&sort_orders[panel->sort_index].sort_name[i]!=0;i++) 
+	numch++; 
+    offset=offset+4+numch; 
+    widget_move (&panel->widget, 0, panel->widget.cols - (offset)); 
+     
+    //output name to panel 
+    attrset (NORMAL_COLOR); 
+    for(i=0;i<numch;i++){ 
+	if(sort_orders[panel->sort_index].sort_name[i]!='&') 
+	    addch(sort_orders[panel->sort_index].sort_name[i]); 
+    } 
+    //calculate dir delta 
+    attrset (REVERSE_COLOR); 
+    return offset; 
+     
+} 
+
+
 static void
 show_dir (WPanel *panel)
 {
-    int len;
+    int  offset = 0; 
+    int  len = 0;     
 
     set_colors (panel);
     draw_double_box (panel->widget.parent,
@@ -813,19 +870,21 @@
     if (panel->active)
 	attrset (REVERSE_COLOR);
 
+    offset = show_dir_sort(panel,4); //< "v" +1
+
     widget_move (&panel->widget, 0, 3);
 
     addch (' ');
-    len = min (max (panel->widget.cols - 9, 0), panel->widget.cols); 
+    len = min (max (panel->widget.cols - (offset+4), 0), panel->widget.cols); 
     addstr (str_term_trim (strip_home_and_password (panel->cwd), len));
     addch (' ');
-
+    /* this buttons are handled in do_panel_event:l2550 */
     widget_move (&panel->widget, 0, 1);
-    addstr ("<");
+    addstr ("<"); /* prev history */
     widget_move (&panel->widget, 0, panel->widget.cols - 2);
-    addstr (">");
+    addstr (">"); /* next history */
     widget_move (&panel->widget, 0, panel->widget.cols - 3);
-    addstr ("v");
+    addstr ("v"); /* history hotlist */
 
     if (!show_mini_info) {
 	if (panel->marked == 0) {
@@ -2521,6 +2580,34 @@
 	return MOU_NORMAL;
     }
 
+    /* "$" change positive*/ 
+    if (event->type & GPM_DOWN && event->x == panel->widget.cols - 4 
+	&& event->y == 1) { 
+	panel->sort_index++; 
+	if ( panel->sort_index>=SORT_TYPES_TOTAL  ) panel->sort_index = 0; 
+	sortfn *sort_order = (sortfn *) sort_orders[panel->sort_index].sort_fn; 
+	panel_set_sort_order (panel, sort_order); 
+	return MOU_NORMAL; 
+    } 
+
+    /* "$" change negative*/ 
+    if (event->type & GPM_DOWN && event->x == panel->widget.cols - 5 
+	&& event->y == 1) { 
+	panel->sort_index--; 
+	if ( panel->sort_index<0  ) panel->sort_index = SORT_TYPES_TOTAL-1; 
+	sortfn *sort_order = (sortfn *) sort_orders[panel->sort_index].sort_fn; 
+	panel_set_sort_order (panel, sort_order); 
+	return MOU_NORMAL; 
+    } 
+ 
+    /* "-+" sort reverse */ 
+    if (event->type & GPM_DOWN && event->x == panel->widget.cols - 6 
+	&& event->y == 1) { 
+	panel->reverse = !panel->reverse; 
+	panel_re_sort (panel); 
+	return MOU_NORMAL; 
+    } 
+
     /* rest of the upper frame, the menu is invisible - call menu */
     if (event->type & GPM_DOWN && event->y == 1 && !menubar_visible) {
 	*redir = 1;
