utils/smbcontrol.c: Fixes from Herb for interactive use.
authorJeremy Allison <jra@samba.org>
Fri, 29 Sep 2000 20:08:00 +0000 (20:08 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 29 Sep 2000 20:08:00 +0000 (20:08 +0000)
printing/nt_printing.c: No C++ comments please :-).
Jeremy.
(This used to be commit dd9f668108215f18240458fc33bf872a6fc9e6be)

source3/printing/nt_printing.c
source3/utils/smbcontrol.c

index 73d54f305cf087710c7ef624a68927e2d2846034..69e9233d27307a4daceac8fed64a8b3db35b4d6a 100644 (file)
@@ -1347,7 +1347,7 @@ NT_DEVICEMODE *construct_nt_devicemode(const fstring default_devicename)
        nt_devmode->scale            = 0x64;
        nt_devmode->copies           = 01;
        nt_devmode->defaultsource    = BIN_FORMSOURCE;
-       nt_devmode->printquality     = RES_HIGH;           // 0x0258;
+       nt_devmode->printquality     = RES_HIGH;           /* 0x0258 */
        nt_devmode->color            = COLOR_MONOCHROME;
        nt_devmode->duplex           = DUP_SIMPLEX;
        nt_devmode->yresolution      = 0;
index b31b53473c4f9cca93a1babad14c6e53edc90e68..cedb13620d5c5052d2516afc275a2b74d1ffd72d 100644 (file)
@@ -33,15 +33,20 @@ static struct {
        {NULL, -1}
 };
 
-static void usage(void)
+static void usage(BOOL doexit)
 {
        int i;
-       printf("Usage: smbcontrol <destination> <message-type> <parameters>\n\n");
+       if (doexit) {
+               printf("Usage: smbcontrol -i\n");
+               printf("       smbcontrol <destination> <message-type> <parameters>\n\n");
+       } else {
+               printf("<destination> <message-type> <parameters>\n\n");
+       }
        printf("\t<destination> is one of \"nmbd\", \"smbd\" or a process ID\n");
        printf("\t<message-type> is one of: ");
        for (i=0; msg_types[i].name; i++) printf("%s, ", msg_types[i].name);
        printf("\n");
-       exit(1);
+       if (doexit) exit(1);
 }
 
 static int pong_count;
@@ -94,54 +99,45 @@ static int parse_type(char *mtype)
 }
 
 
- int main(int argc, char *argv[])
+/****************************************************************************
+do command
+****************************************************************************/
+static BOOL do_command(char *dest, char *msg_name, char *params)
 {
-       char *dest;
        int i, n, v;
-       pstring servicesf = CONFIGFILE;
        int mtype;
 
-       TimeInit();
-       setup_logging(argv[0],True);
-       
-       charset_initialise();
-       lp_load(servicesf,False,False,False);
-
-       message_init();
-
-       if (argc < 3) usage();
-
-       dest = argv[1];
-       mtype = parse_type(argv[2]);
+       mtype = parse_type(msg_name);
        if (mtype == -1) {
-               fprintf(stderr,"Couldn't resolve message type: %s\n", argv[2]);
-               exit(1);
+               fprintf(stderr,"Couldn't resolve message type: %s\n", msg_name);
+               return(False);
        }
 
-       argc -= 2;
-       argv += 2;
-       
        switch (mtype) {
        case MSG_DEBUG:
-               if (argc < 2) {
+               if (!params) {
                        fprintf(stderr,"MSG_DEBUG needs a parameter\n");
-                       exit(1);
+                       return(False);
                }
-               v = atoi(argv[1]);
+               v = atoi(params);
                send_message(dest, MSG_DEBUG, &v, sizeof(int));
                break;
 
        case MSG_FORCE_ELECTION:
                if (!strequal(dest, "nmbd")) {
                        fprintf(stderr,"force-election can only be sent to nmbd\n");
-                       exit(1);
+                       return(False);
                }
                send_message(dest, MSG_FORCE_ELECTION, NULL, 0);
                break;
 
        case MSG_PING:
                message_register(MSG_PONG, pong_function);
-               n = atoi(argv[1]);
+               if (!params) {
+                       fprintf(stderr,"MSG_PING needs a parameter\n");
+                       return(False);
+               }
+               n = atoi(params);
                for (i=0;i<n;i++) {
                        send_message(dest, MSG_PING, NULL, 0);
                }
@@ -150,6 +146,63 @@ static int parse_type(char *mtype)
 
        }
        
-       return (0);
+       return (True);
+}
+
+ int main(int argc, char *argv[])
+{
+       int opt;
+       char temp[255];
+       extern int optind;
+       pstring servicesf = CONFIGFILE;
+       BOOL interactive = False;
+
+       TimeInit();
+       setup_logging(argv[0],True);
+       
+       charset_initialise();
+       lp_load(servicesf,False,False,False);
+
+       message_init();
+
+       if (argc < 2) usage(True);
+
+       while ((opt = getopt(argc, argv,"i")) != EOF) {
+               switch (opt) {
+               case 'i':
+                       interactive = True;
+                       break;
+               default:
+                       printf("Unknown option %c (%d)\n", (char)opt, opt);
+                       usage(True);
+               }
+       }
+
+       argc -= optind;
+       argv = &argv[optind];
+
+       if (!interactive) {
+               if (argc < 2) usage(True);
+               return (do_command(argv[0],argv[1],argc > 2 ? argv[2] : 0));
+       }
+
+       while (True) {
+               char *myargv[3];
+               int myargc;
+
+               printf("smbcontrol> ");
+               if (!gets(temp)) break;
+               myargc = 0;
+               while ((myargc < 3) && 
+                      (myargv[myargc] = strtok(myargc?NULL:temp," \t"))) {
+                       myargc++;
+               }
+               if (!myargc) break;
+               if (myargc < 2)
+                       usage(False);
+               else if (!do_command(myargv[0],myargv[1],myargc > 2 ? myargv[2] : 0))
+                       usage(False);
+       }
+       return(0);
 }