]> andersk Git - moira.git/blobdiff - clients/moira/menu.c
added checking for fsgroups
[moira.git] / clients / moira / menu.c
index b9e157ef74d26ffbadd40e8d4f16dd3dfacb0734..538f7b2125a5658853207615a871ba5986e83a4c 100644 (file)
@@ -22,6 +22,7 @@ static char rcsid_menu_c[] = "$Header$";
 
 #endif lint
 
+#include <mit-copyright.h>
 #include <sys/types.h>
 #include <stdio.h>
 #include <signal.h>
@@ -111,8 +112,7 @@ Start_menu(m)
        (void) raw();           /* We parse & print everything ourselves */
        (void) noecho();
        cur_ms = make_ms(0);    /* So we always have some current */
-       /* menu_screen */ 
-       top_menu = m;
+                               /* menu_screen */ 
        /* Run the menu */
        (void) Do_menu(m, -1, (char **) NULL);
     }
@@ -136,7 +136,6 @@ Start_no_menu(m)
 {
     cur_ms = NULLMS;
     COLS = 80;
-    top_menu = m;
     /* Run the menu */
     (void) Do_menu(m, -1, (char **) NULL);
 }
@@ -318,7 +317,7 @@ Do_menu(m, margc, margv)
            continue;
        } 
        /* finally, try to find it using Find_command */
-       else if ((command = Find_command(argvals[0])) ==
+       else if ((command = Find_command(m, argvals[0])) ==
                 (struct menu_line *) 0) {
            Put_message("Command not recognized");
            continue;
@@ -393,13 +392,12 @@ int Prompt_input(prompt, buf, buflen)
        while(1) {
            (void) wmove(cur_ms->ms_input, y, x);
                (void) touchwin(cur_ms->ms_screen);
-#ifdef notdef
            (void) wclrtoeol(cur_ms->ms_input);
-#endif notdef
            refresh_ms(cur_ms);
            c = getchar() & 0x7f;
            switch (c) {
            case CTL('C'):
+               *p = '\0';
                return 0;
            case CTL('Z'):
                (void) kill(getpid(), SIGTSTP);
@@ -433,7 +431,8 @@ int Prompt_input(prompt, buf, buflen)
                p = buf;
                break;
            default:
-               if (isprint(c) && (p - buf < buflen)) {
+               /* (buflen - 1) leaves room for the \0 */
+               if (isprint(c) && (p - buf < buflen - 1)) {
                    (void) waddch(cur_ms->ms_input, c);
                    *p++ = c;
                    x++;
@@ -633,7 +632,7 @@ char *msg;
            }
            else {
                printf("---More (hit return)---");
-               (void) getchar() & 0x7f;
+               getchar();
            }
            Start_paging();     /* Reset lines_left */
        }
@@ -708,10 +707,11 @@ find_command_from(c, m, d)
        if (!strcmp(c, m->m_lines[line].ml_command)) {
            return (&m->m_lines[line]);
        }
-       else if (m->m_lines[line].ml_submenu != NULLMENU
-                && (maybe =
-                  find_command_from(c, m->m_lines[line].ml_submenu, d - 1))
-                != (struct menu_line *) 0) {
+    }
+    for (line = 0; line < m->m_length; line++) {
+       if (m->m_lines[line].ml_submenu != NULLMENU  &&
+           (maybe = find_command_from(c, m->m_lines[line].ml_submenu, d - 1))
+               != (struct menu_line *) 0) {
            return (maybe);
        }
     }
@@ -723,14 +723,15 @@ find_command_from(c, m, d)
 /* And returns a pointer to a menu_line with the specified command name */
 /* It returns (struct menu_line *) 0 if none is found */
 struct menu_line *
-Find_command(command)
+Find_command(m, command)
+    Menu *m;
     char *command;
 {
-    if (top_menu == NULLMENU) {
+    if (m == NULLMENU) {
        return ((struct menu_line *) 0);
     }
     else {
-       return (find_command_from(command, top_menu, MAX_MENU_DEPTH));
+       return (find_command_from(command, m, MAX_MENU_DEPTH));
     }
 }
 
@@ -746,7 +747,6 @@ toggle_logging(argc, argv)
     if (log_file == (FILE *) NULL) {
        pid = getpid();
        if (!whoami) {
-           char *whoami;
            Put_message("I've lost my SENSE of DIRECTION!  I have no IDEA who I AM!");
            Put_message("My God... You've turned him into a DEMOCRAT!!");
            Put_message("               -- Doonesbury");
@@ -774,14 +774,3 @@ toggle_logging(argc, argv)
     }
     return(DM_NORMAL);
 } 
-
-/*
- * Local Variables:
- * mode: c
- * c-indent-level: 4
- * c-continued-statement-offset: 4
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * End:
- */
This page took 0.079836 seconds and 4 git commands to generate.