window_t *winelem[MAXPANELS] = {0};
window_t *winmenu = NULL;
window_t *winscreen = NULL;
+list_t *list[MAXPANELS] = {0};
char *help =
"alt Menu functions\n"
return ret;
}
-int emergency_stop = 0;
-void dostop (int sig)
+void dostop (__attribute__((unused)) int sig)
{
- if (askwindow (" Restart (Y/N) ", winscreen, "Yy", "Nn") == 1) {
- emergency_stop = 1;
+ static int end = 0;
+ if (!end) {
+ end = (sig == 1);
+ }
+
+ if (end || (askwindow (" Quit (Y/N) ", winscreen, "Yy", "Nn") == 1)) {
+ if (winscreen) {
+ endwin ();
+ }
+
+ int i;
+ for (i = 0; i < MAXPANELS; i++) {
+ free (dirname[i]);
+ freelist (list[i]);
+ freewindow (windir[i]);
+ freewindow (winelem[i]);
+ }
+ freewindow (winmenu);
+ freewindow (winscreen);
+
+ exit (sig > 0);
}
}
/* main function */
int main (int argc, char *argv[])
{
- int rc = 1;
int i;
/* get basename */
int index_s[MAXPANELS] = {0};
int index_x[MAXPANELS] = {0};
int index_y[MAXPANELS] = {0};
- list_t *list[MAXPANELS] = {0};
int page[MAXPANELS] = {0};
/* catch signals */
#endif
signal (SIGABRT, &dostop);
signal (SIGSEGV, &dostop);
- signal (SIGTERM, &dostop);
+// signal (SIGTERM, &dostop);
/* event loop */
int stop = 0;
if (list[i] == NULL) {
endwin ();
VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", (dirname[i]) ? dirname[i] : "."));
- rc = 1;
- goto end;
+ dostop (-1);
}
}
}
int ch = getch ();
- if (emergency_stop) {
- stop = 1;
- continue;
- }
switch (ch) {
case '\n':
case '\r':
free (string);
break;
case ALT_Q: /* quit */
- if (askwindow (" Restart (Y/N) ", winscreen, "Yy", "Nn") == 1) {
+ if (askwindow (" Quit (Y/N) ", winscreen, "Yy", "Nn") == 1) {
stop = 1;
}
break;
}
}
- endwin ();
-
-end:
- for (i = 0; i < MAXPANELS; i++) {
- free (dirname[i]);
- freelist (list[i]);
- freewindow (windir[i]);
- freewindow (winelem[i]);
- }
- freewindow (winmenu);
- freewindow (winscreen);
-
- return rc;
+ dostop (0);
+ return 0;
}
/* test: fm.exe -d 2>&1 | grep 'no directory name' */