📄 mfm.c
字号:
/* mfm - A graphical Frontend to mtools *//* Copyright (c) 1999 Christian Ospelkaus <christian@core-coutainville.org> *//* This program is free software; you can redistribute it and/or *//* modify it under the terms of the GNU General Public License *//* as published by the Free Software Foundation; either version 2 *//* of the License, or (at your option) any later version. *//* This program is distributed in the hope that it will be useful, *//* but WITHOUT ANY WARRANTY; without even the implied warranty of *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *//* GNU General Public License for more details. *//* You should have received a copy of the GNU General Public License *//* along with this program; if not, write to the Free Software *//* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifndef HAVE_CONFIG_H#include "manualconf.h"#endif#include <gtk/gtk.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/time.h>#include <sys/stat.h>#include <sys/wait.h>#include <dirent.h>#include <time.h>#include <ctype.h>#include <fcntl.h>#include <signal.h>#include "mfm.h"int er_interface (FILE * infile);char *removespace (char *string){ int i; if (debug) printf ("In removespace()\n"); while (string[0] == ' ') { for (i = 0; i < strlen (string); i++) string[i] = string[i + 1]; } for (i = strlen (string) - 1; i >= 0; i--) if (string[i] == ' ') string[i] = '\0'; return (string);}intcasecompare (const char *string1, const char *string2){ if (debug) printf ("In casecompare()\n"); for (; (*string1) && (*string2) && (tolower (*string1) == tolower (*string2)); string1++, string2++); if ((*string1) || (*string2)) return (0); else return (1);}voidshiftstring (char *text, int n){ char *runp; for (runp = text + strlen (text); runp != (text - 1); *(runp + n) = *runp, runp--);}gintdialog_event (GtkWidget * widget, msgenv * msg){ if (debug) { printf ("In dialog_event()\n"); printf (" msg: %i\n", msg->msg); } *(msg->mvar) = msg->msg; return (TRUE);}gintdialogclose_event (GtkWidget * widget, GdkEvent * event, msgenv * msg){ if (debug) { printf ("In dialogclose_event()\n"); printf (" msg: %i\n", msg->msg); } *(msg->mvar) = msg->msg; return (TRUE);}voidwarnme (const char *title, const char *text){ GtkWidget *dialog, *okbutton, *label, *hbox;#ifndef NOPIXMAPS GtkWidget *mfmpixwid;#endif int flag = 0; msgenv msg; if (debug) printf ("In warnme()\n"); msg.mvar = &flag; msg.msg = 1; dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", GTK_SIGNAL_FUNC (dialogclose_event), &msg); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, FALSE, 15); gtk_widget_show (hbox);#ifndef NOPIXMAPS mfmpixwid = gtk_pixmap_new (mfmpix, mfmmask); gtk_box_pack_start (GTK_BOX (hbox), mfmpixwid, FALSE, FALSE, 15); gtk_widget_show (mfmpixwid);#endif label = gtk_label_new (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 15); gtk_widget_show (label); okbutton = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_grab_default (okbutton); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msg); gtk_widget_show (okbutton); gtk_grab_add (dialog);#ifndef OLDGTK gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);#endif gtk_widget_show (dialog);#ifndef NOPIXMAPS gdk_window_set_icon (dialog->window, NULL, mfmpix, mfmmask);#endif while (!flag) { while (gtk_events_pending ()) gtk_main_iteration (); } gtk_grab_remove (dialog); gtk_widget_destroy (dialog); if (debug) printf ("End warnme()\n");}intshallwecontinue (const char *title, const char *text){ GtkWidget *dialog, *okbutton, *label, *hbox;#ifndef NOPIXMAPS GtkWidget *mfmpixwid;#endif int flag = 0; msgenv msg, msgok; if (debug) printf ("In shallwecontinue()\n"); msg.mvar = &flag; msg.msg = 1; msgok.mvar = &flag; msgok.msg = 2; dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", GTK_SIGNAL_FUNC (dialogclose_event), &msg); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, FALSE, 15); gtk_widget_show (hbox);#ifndef NOPIXMAPS mfmpixwid = gtk_pixmap_new (mfmpix, mfmmask); gtk_box_pack_start (GTK_BOX (hbox), mfmpixwid, FALSE, FALSE, 15); gtk_widget_show (mfmpixwid);#endif label = gtk_label_new (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 15); gtk_widget_show (label); okbutton = gtk_button_new_with_label ("Continue"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_grab_default (okbutton); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msgok); gtk_widget_show (okbutton); okbutton = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msg); gtk_widget_show (okbutton); gtk_grab_add (dialog);#ifndef OLDGTK gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);#endif gtk_widget_show (dialog);#ifndef NOPIXMAPS gdk_window_set_icon (dialog->window, NULL, mfmpix, mfmmask);#endif while (!flag) { while (gtk_events_pending ()) gtk_main_iteration (); } gtk_grab_remove (dialog); gtk_widget_destroy (dialog); if (debug) printf ("End of shallwecontinue()\n"); return (flag);}intcopyquestion (const char *title, const char *text){ GtkWidget *dialog, *okbutton, *label, *hbox;#ifndef NOPIXMAPS GtkWidget *mfmpixwid;#endif int flag = 0; msgenv msgcancel, msgret, msgskip; if (debug) printf ("In copyquestion()\n"); msgcancel.mvar = &flag; msgcancel.msg = 1; msgret.mvar = &flag; msgret.msg = 2; msgskip.mvar = &flag; msgskip.msg = 3; dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", GTK_SIGNAL_FUNC (dialogclose_event), &msgcancel); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, FALSE, 15); gtk_widget_show (hbox);#ifndef NOPIXMAPS mfmpixwid = gtk_pixmap_new (mfmpix, mfmmask); gtk_box_pack_start (GTK_BOX (hbox), mfmpixwid, FALSE, FALSE, 15); gtk_widget_show (mfmpixwid);#endif label = gtk_label_new (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 15); gtk_widget_show (label); okbutton = gtk_button_new_with_label ("Retry"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_grab_default (okbutton); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msgret); gtk_widget_show (okbutton); okbutton = gtk_button_new_with_label ("Skip"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msgskip); gtk_widget_show (okbutton); okbutton = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), &msgcancel); gtk_widget_show (okbutton); gtk_grab_add (dialog);#ifndef OLDGTK gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);#endif gtk_widget_show (dialog);#ifndef NOPIXMAPS gdk_window_set_icon (dialog->window, NULL, mfmpix, mfmmask);#endif while (!flag) { while (gtk_events_pending ()) gtk_main_iteration (); } gtk_grab_remove (dialog); gtk_widget_destroy (dialog); if (debug) printf ("End of copyquestion()\n"); return (flag);}voidmtoolserroutput (const char *text){ gtk_text_insert (GTK_TEXT (outtext), NULL, NULL, NULL, text, -1);}intentertext (char *title, char *text, char *answer, int length){ GtkWidget *dialog, *okbutton, *cancelbutton, *label, *hbox, *entry;#ifndef NOPIXMAPS GtkWidget *mfmpixwid;#endif int flag = 0; msgenv msg[2]; if (debug) printf ("In entertext()\n"); dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", GTK_SIGNAL_FUNC (dialogclose_event), &msg); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, FALSE, 15); gtk_widget_show (hbox);#ifndef NOPIXMAPS mfmpixwid = gtk_pixmap_new (mfmpix, mfmmask); gtk_box_pack_start (GTK_BOX (hbox), mfmpixwid, FALSE, FALSE, 15); gtk_widget_show (mfmpixwid);#endif label = gtk_label_new (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 15); gtk_widget_show (label); entry = gtk_entry_new (); gtk_entry_set_max_length (GTK_ENTRY (entry), length); gtk_entry_set_text (GTK_ENTRY (entry), answer); gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, FALSE, 5); gtk_widget_show (entry); okbutton = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton, TRUE, FALSE, 0); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_grab_default (okbutton); msg[0].mvar = &flag; msg[0].msg = 1; gtk_signal_connect (GTK_OBJECT (okbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), msg); gtk_widget_show (okbutton); cancelbutton = gtk_button_new_with_label ("Cancel"); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), cancelbutton, TRUE, FALSE, 0); msg[1].mvar = &flag; msg[1].msg = 2; gtk_signal_connect (GTK_OBJECT (cancelbutton), "clicked", GTK_SIGNAL_FUNC (dialog_event), msg + 1); gtk_widget_show (cancelbutton); gtk_grab_add (dialog);#ifndef OLDGTK gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);#endif gtk_widget_show (dialog);#ifndef NOPIXMAPS gdk_window_set_icon (dialog->window, NULL, mfmpix, mfmmask);#endif while (!flag) { while (gtk_events_pending ()) gtk_main_iteration (); } strcpy (answer, gtk_entry_get_text (GTK_ENTRY (entry))); gtk_grab_remove (dialog); gtk_widget_destroy (dialog); if (debug) printf ("End entertext()\n"); return (flag);}GtkWidget *ambusy (char *title, char *text){ GtkWidget *window, *label, *box;#ifndef NOPIXMAPS GtkWidget *mfmpixwid;#endif int flag = 0; static msgenv msg; msg.mvar = &flag; msg.msg = 1; if (debug) printf ("In ambusy()\n"); window = gtk_window_new (GTK_WINDOW_DIALOG); gtk_window_set_title (GTK_WINDOW (window), title);/* gtk_widget_set_usize(GTK_WIDGET(window), 750, 400); */ gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (dialogclose_event), &msg);#ifndef OLDGTK gtk_container_set_border_width (GTK_CONTAINER (window), 15);#endif box = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), box); gtk_widget_show (box);#ifndef NOPIXMAPS mfmpixwid = gtk_pixmap_new (mfmpix, mfmmask); gtk_box_pack_start (GTK_BOX (box), mfmpixwid, FALSE, FALSE, 15); gtk_widget_show (mfmpixwid);#endif label = gtk_label_new (text); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 15); gtk_widget_show (label); gtk_grab_add (window);#ifndef OLDGTK gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);#endif gtk_widget_show (window);#ifndef NOPIXMAPS gdk_window_set_icon (window->window, NULL, mfmpix, mfmmask);#endif if (debug) printf ("End ambusy()\n"); return (window);}intpathlength (side * whichside){ int i; int n = 1; if (debug) printf ("In pathlength()\n"); for (i = 0; i < whichside->length; i++) n += strlen (whichside->path[i]) + 1; if (debug) { printf (" n: %i\n", n); printf ("End pathlength()\n"); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -