⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfm.c

📁 a graphic tools for MTools
💻 C
📖 第 1 页 / 共 5 页
字号:
  int status, lex_result;  if (debug)    printf ("In mkdir_event()\n");  getpath (whichside, &path);  if (whichside->drive)    {      shiftstring (path, 2);      path[0] = whichside->drive;      path[1] = ':';    }  filebegin = path + strlen (path);  strcpy (filebegin, "New directory");  if (      (flag =       entertext ("Make directory", "Enter new name for new directory:",		  filebegin, 255)) == 1)    {      if (whichside->drive)	{	  if (pipe (copypipe) < 0)	    {	      printf ("  Error with pipe()\n");	      gtk_main_quit ();	    }	  if ((childpid = fork ()) < 0)	    {	      printf ("  Error with fork()\n");	      exit (-1);	    }	  else if (childpid == 0)	/* child */	    {	      if (debug)		printf ("  in child\n");	      close (copypipe[0]);	      if (copypipe[1] != STDERR_FILENO)		{		  if (dup2 (copypipe[1], STDERR_FILENO) != STDERR_FILENO)		    {		      printf ("  Error with dup2()\n");		      gtk_main_quit ();		    }		  close (copypipe[1]);		}	      execl (mtoolscommand, "mmd", path, NULL);	      printf ("  error in execl()\n");	      printf ("  errno:%d\n", errno);	      _exit (-1);	    }	  else			/* parent */	    {	      if (debug)		printf ("  in parent\n");	      close (copypipe[1]);	      if ((mcopyout = fdopen (copypipe[0], "r")) == NULL)		{		  printf ("  Error while opening pipe for reading\n");		  gtk_main_quit ();		}	      lex_result = er_interface (mcopyout);	      while (1)		{		  while (gtk_events_pending ())		    gtk_main_iteration ();		  if (waitpid (childpid, &status, WNOHANG) == childpid)		    {		      waitpid (childpid, &status, WUNTRACED);		      break;		    }		}	    }	}      else	{	  mkdir (path, 0777);	}    }  free (path);  refresh_event (whichside->list, whichside);  if (debug)    printf ("End mkdir_event()\n");}voidabout_event (GtkWidget * widget, GdkEvent * event, gpointer Data){  if (debug)    printf ("In about_event()\n");  warnme ("about MToolsFM", ABOUTMFM);}voiduse_event (GtkWidget * widget, GdkEvent * event, gpointer Data){  if (debug)    printf ("In use_event()\n");  warnme ("How to use MToolsFM", MFMUSE);}voidcommand_event (GtkWidget * widget, GdkEvent * event, gpointer Data){  if (debug)    printf ("In command_event()\n");  warnme ("Command line options", MFMOPTIONS);}voidcombo_change (GtkWidget * widget, side * whichside){  char *string;  if (debug)    printf ("In combo_change()\n");  string = gtk_entry_get_text (GTK_ENTRY (widget));  if (strcmp (string, "Harddisk"))    {      whichside->drive = string[0];      clearpath (whichside);    }  else    {      whichside->drive = '\0';      clearpath (whichside);      gethdpath (whichside);    }  refresh_event (whichside->list, whichside);  if (debug)    printf ("End combo_change()\n");  return;}gintdclick_callback (GtkWidget * widget, gint row,		 gint column, GdkEventButton * event, side * whichside){  long totsize = 0;  GList *items;  char *path, *drivepath;  if (debug)    printf ("In dclick_callback()\n");  items = GTK_CLIST (whichside->list)->selection;  while (items)    {      totsize +=	((dentry *)	 gtk_clist_get_row_data (GTK_CLIST (whichside->list),				 (int) (items->data)))->size;      items = items->next;    }  whichside->totsize = totsize;  getpath (whichside, &path);  drivepath = malloc ((strlen (path) + 30) * sizeof (char));  sprintf (drivepath, "%li bytes selected in ", totsize);  if (whichside->drive)    sprintf (drivepath + strlen (drivepath), "%c:", whichside->drive);  strcat (drivepath, path);  gtk_statusbar_pop (GTK_STATUSBAR (whichside->status), whichside->context);  gtk_statusbar_push (GTK_STATUSBAR (whichside->status),		      whichside->context, drivepath);  free (path);  free (drivepath);  if (event && (event->type == GDK_2BUTTON_PRESS))    {      gchar *text;      if (debug)	printf ("  doubleclick\n");      gtk_clist_unselect_row (GTK_CLIST (widget), row, column);      gtk_clist_get_text (GTK_CLIST (widget), row, 1, &text);      if (	  ((dentry *)	   gtk_clist_get_row_data (GTK_CLIST (whichside->list), row))->dir)	{	  if (strcmp (text, "..") && (whichside->length < DIR_DEPTH - 1))	    {	      whichside->path[whichside->length] =		(gchar *) malloc ((strlen (text) + 1) * sizeof (gchar));	      strcpy (whichside->path[whichside->length], text);	      whichside->length += 1;	    }	  else if (whichside->length)	    {	      whichside->length -= 1;	      free (whichside->path[whichside->length]);	    }	  refresh_event (widget, whichside);	}    }  if (debug)    printf ("End dclick_callback()\n");  return (FALSE);}gintrclick_callback (GtkWidget * widget, GdkEventButton * event, side * whichside){  if (debug)    printf ("In rclick_callback()\n");  if (event && (event->type == GDK_BUTTON_PRESS) && (event->button == 3))    {      gtk_menu_popup (GTK_MENU (whichside->contextmenu),		      NULL, NULL, NULL, NULL, event->button, event->time);      return (TRUE);    }  else    return (FALSE);}gint sort_callback (GtkWidget * widget, gint column, side * whichside){  if (debug)    printf ("In sort_callback()\n");  if (column > 0)    {      gtk_clist_set_sort_column (GTK_CLIST (whichside->list), column);      gtk_clist_sort (GTK_CLIST (whichside->list));    }  return (TRUE);}void sort_now( GtkCheckMenuItem * MenuItem, side * left ){  gtk_clist_sort( GTK_CLIST(left->list) );  gtk_clist_sort( GTK_CLIST(left->other->list) );}intdatecompare (const char *text1, const char *text2){  int comp;  if (!text2)    return (text1 != NULL);  if (!text1)    return -1;  if ((comp = memcmp (text1 + 6, text2 + 6, 4)) < 0)    return -1;  else if (comp > 0)    return 1;  if ((comp = memcmp (text1, text2, 2)) < 0)    return -1;  else if (comp > 0)    return 1;  if ((comp = memcmp (text1 + 3, text2 + 3, 2)) < 0)    return -1;  else if (comp > 0)    return 1;  return 0;}static gintsortnew (GtkCList * clist, gconstpointer ptr1, gconstpointer ptr2){  char *name1 = NULL;  char *name2 = NULL;  GtkCListRow *row1 = (GtkCListRow *) ptr1;  GtkCListRow *row2 = (GtkCListRow *) ptr2;  dentry *d1 = (dentry *) row1->data;  dentry *d2 = (dentry *) row2->data;  name1 = GTK_CELL_TEXT (row1->cell[1])->text;  name2 = GTK_CELL_TEXT (row2->cell[1])->text;  if(GTK_CHECK_MENU_ITEM (dirfirst)->active)    {      if( (d1->dir + d2->dir) & 1 )	return (d1->dir < d2->dir);    }  if (clist->sort_column == 2)    return(d1->size < d2->size);  else if ((clist->sort_column == 3) || (clist->sort_column == 4))    {      char *textdate1 = NULL;      char *textdate2 = NULL;      char *texttime1 = NULL;      char *texttime2 = NULL;      int comp;      textdate1 = GTK_CELL_TEXT (row1->cell[3])->text;      textdate2 = GTK_CELL_TEXT (row2->cell[3])->text;      texttime1 = GTK_CELL_TEXT (row1->cell[4])->text;      texttime2 = GTK_CELL_TEXT (row2->cell[4])->text;      if ((comp = datecompare (textdate1, textdate2)))	return comp;      return (strcmp (texttime1, texttime2));    }  else    return (*default_compare_func) (clist, ptr1, ptr2);}void resize_event(GtkWidget *widget, GdkEventConfigure *event, side *left){  side *right=left->other;  int boxwidth;  if (debug)    printf ("In resize_event()\n");  boxwidth=(widget->allocation.width-30-middlebox->allocation.width)/2;  gtk_widget_set_usize (left->box, boxwidth, 200);  gtk_widget_set_usize (right->box, boxwidth, 200);}GtkWidget *create_side (side * whichside, char *copytext){  GtkItemFactoryEntry menu_items[] = {    {"/_File",                  NULL, NULL, 0, "<Branch>"},    {"/File/Delete",            NULL, NULL, 0, NULL},    {"/File/Rename",            NULL, NULL, 0, NULL},    {"/File/Print",             NULL, NULL, 0, NULL},    {"/File/Make directory",    NULL, NULL, 0, NULL},    {"/_View",                  NULL, NULL, 0, "<Branch>"},    {"/View/Refresh",           NULL, NULL, 0, NULL},    {"/_Select",                NULL, NULL, 0, "<Branch>"},    {"/Select/All",             NULL, NULL, 0, NULL},    {"/Select/None",            NULL, NULL, 0, NULL} };  GtkItemFactory *item_factory;  GtkWidget *popup_item;  GtkWidget *box, *inbox, *menubar;#ifndef OLDGTK  GtkWidget *scroll;#endif  if (debug)    printf ("In create_side()\n");  box = gtk_vbox_new (FALSE, 5);  whichside->box=box;  /* menubar, combobox for drive */  inbox = gtk_hbox_new (FALSE, 0);  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", NULL);  gtk_item_factory_create_items (item_factory,				 sizeof (menu_items) /				 sizeof (menu_items[0]), menu_items, NULL);  menubar = gtk_item_factory_get_widget (item_factory, "<main>");  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/File/Delete")),		      "activate", GTK_SIGNAL_FUNC (filedelete_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/File/Rename")),		      "activate", GTK_SIGNAL_FUNC (filerename_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/File/Print")),		      "activate", GTK_SIGNAL_FUNC (fileprint_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/File/Make directory")),		      "activate", GTK_SIGNAL_FUNC (mkdir_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/View/Refresh")),		      "activate", GTK_SIGNAL_FUNC (refresh_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/Select/All")),		      "activate", GTK_SIGNAL_FUNC (selectall_event), whichside);  gtk_signal_connect (GTK_OBJECT		      (gtk_item_factory_get_widget		       (item_factory, "/Select/None")),		      "activate", GTK_SIGNAL_FUNC (selectnone_event), whichside);  gtk_box_pack_start (GTK_BOX (inbox), menubar, TRUE, TRUE, 5);  whichside->combo = gtk_combo_new ();  whichside->comboglist = NULL;#ifndef OLDGTK  gtk_widget_set_usize (whichside->combo, 80, 0);#endif  gtk_entry_set_editable (GTK_ENTRY			  (GTK_COMBO (whichside->combo)->entry), FALSE);  set_combo_entries (whichside);  if (!whichside->drive)    gethdpath (whichside);  gtk_box_pack_end (GTK_BOX (inbox), whichside->combo, FALSE, TRUE, 5);  gtk_widget_show (menubar);  gtk_widget_show (whichside->combo);  gtk_box_pack_start (GTK_BOX (box), inbox, FALSE, TRUE, 0);  gtk_widget_show (inbox);  gtk_signal_connect (GTK_OBJECT		      (GTK_COMBO (whichside->combo)->entry), "changed",		      GTK_SIGNAL_FUNC (combo_change), whichside);  /* clist and scrollbars */#ifndef OLDGTK  scroll = gtk_scrolled_window_new (NULL, NULL);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW				  (scroll),				  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);#endif  whichside->list = gtk_clist_new (5);  gtk_clist_column_titles_show (GTK_CLIST (whichside->list));  gtk_clist_set_selection_mode (GTK_CLIST				(whichside->list), GTK_SELECTION_EXTENDED);  gtk_clist_column_titles_passive (GTK_CLIST (whichside->list));#ifndef OLDGTK  gtk_container_add (GTK_CONTAINER (scroll), whichside->list);#else  gtk_clist_set_policy (GTK_CLIST (whichside->list),			GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  gtk_box_pack_start (GTK_BOX (box), whichside->list, TRUE, TRUE, 0);#endif  gtk_clist_set_column_title (GTK_CLIST (whichside->list), 0, (gchar *) "");  gtk_clist_set_column_title (GTK_CLIST			      (whichside->list), 1, (gchar *) "Filename");  gtk_clist_set_column_title (GTK_CLIST			      (whichside->list), 2, (gchar *) "Size");  gtk_clist_set_column_title (GTK_CLIST			      (whichside->list), 3, (gchar *) "Date");  gtk_clist_set_column_title (GTK_CLIST			      (whichside->list), 4, (gchar *) "Time");#ifdef NOPIXMAPS  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 0, 0);#else  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 0, 20);#endif  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 1, 110);  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 2, 50);  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 3, 75);  gtk_clist_set_column_width (GTK_CLIST (whichside->list), 4, 30);  gtk_clist_set_column_justification (GTK_CLIST				      (whichside->list),				      2, GTK_JUSTIFY_RIGHT);  gtk_clist_set_sort_column (GTK_CLIST (whichside->list), 1);  gtk_clist_set_auto_sort (GTK_CLIST (whichside->list), FALSE);  gtk_signal_connect (GTK_OBJECT (whichside->list),		      "select_row",		      GTK_SIGNAL_FUNC (dclick_callback), whichside);  gtk_signal_connect (GTK_OBJECT (whichside->list),		      "unselect_row",		      GTK_SIGNAL_FUNC (dclick_callback), whichside);  gtk_signal_connect (GTK_OBJECT (whichside->list),		      "button-press-event",		      GTK_SIGNAL_FUNC (rclick_callback), whichside);  gtk_signal_connect (GTK_OBJECT (whichside->list),		      "click-column",		      GTK_SIGNAL_FUNC (sort_callback), whichside);  default_compare_func = GTK_CLIST (whichside->list)->compare;  gtk_clist_set_compare_func (GTK_CLIST (whichside->list), sortnew);  gtk_widget_show (whichside->list);#ifndef OLDGTK  gtk_widget_show (scroll);#endif  /* status bar */  whichside->status = gtk_statusbar_new ();  gtk_box_pack_start (GTK_BOX (box), whichside->status, FALSE, TRUE, 0);  whichside->context =    gtk_statusbar_get_context_id (GTK_STATUSBAR				  (whichside->status), "left window");  gtk_statusbar_pop (GTK_STATUSBAR (whichside->status), whichside->context);  gtk_statusbar_push (GTK_STATUSBAR (whichside->status),		      whichside->context, "");  gtk_widget_show (whichside->status);  gtk_widget_show (box);  /* context menu */  whichside->contextmenu = gtk_menu_new ();  popup_item = gtk_menu_item_new_with_label ("Delete");  gtk_menu_append (GTK_MENU (whichside->contextmenu), popup_item);  gtk_signal_connect (GTK_OBJECT (popup_item),		      "activate",		      GTK_SIGNAL_FUNC (filedelete_event), whichside);  gtk_widget_show (popup_item);  popup_item = gtk_menu_item_new_with_label ("Rename");  gtk_menu_append (GTK_MENU (whichside->contextmenu), popup_item);  gtk_signal_connect (GTK_OBJECT (popup_item),		      "activate",		      GTK_SIGNAL_FUNC (filerename_event), whichside);  gtk_widget_show (popup_item);  popup_item = gtk_menu_item_new_with_label ("Print");  gtk_menu_append (GTK_MENU (whichside->contextmenu), popup_item);  gtk_signal_connect (GTK_OBJECT (popup_item),		      "activate",		      GTK_SIGNAL_FUNC (fileprint_event), whichside);  gtk_widget_show (popup_item);  popup_item = gtk_menu_item_new_with_label (copytext);  gtk_menu_append (GTK_MENU (whichside->contextmenu), popup_item);  gtk_signal_connect (GTK_OBJECT (popup_item),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -