char * whoami; /* used by menu.c ugh!!! */
-extern Menu sms_top_menu;
+extern Menu sms_top_menu, list_menu, user_menu, dcm_menu;
#ifndef DEBUG
static void SignalHandler();
char ** argv;
{
int status;
+ Menu *menu;
+ char *motd, **arg, *server;
if ((user = getlogin()) == NULL)
user = getpwuid((int) getuid())->pw_name;
user = (user && strlen(user)) ? Strsave(user) : "";
- init_sms_err_tbl();
- init_krb_err_tbl();
- verbose = TRUE;
-
- switch (argc) {
- case 2:
- if (strcmp(argv[1], "-nomenu") == 0)
- use_menu = FALSE;
- else
- Usage();
- /* Fall Through. */
- case 1:
- if ((program_name = rindex(argv[0], '/')) == NULL)
- program_name = argv[0];
- else
- program_name++;
- break;
- default:
- Usage();
- break;
- }
-
+ if ((program_name = rindex(argv[0], '/')) == NULL)
+ program_name = argv[0];
+ else
+ program_name++;
program_name = Strsave(program_name);
whoami = Strsave(program_name); /* used by menu.c, ugh !!! */
- if ( status = sms_connect() )
+ verbose = TRUE;
+ arg = argv;
+ server = SMS_SERVER;
+
+ while (++arg - argv < argc) {
+ if (**arg == '-') {
+ if (!strcmp(*arg, "-nomenu"))
+ use_menu = FALSE;
+ else if (!strcmp(*arg, "-db"))
+ if (arg - argv < argc - 1) {
+ ++arg;
+ server = *arg;
+ } else
+ Usage(argv);
+ else
+ Usage(argv);
+ }
+ }
+
+ if ( status = sms_connect(server) )
ErrorExit("\nConnection to SMS server failed", status);
+ if ( status = sms_motd(&motd) )
+ ErrorExit("\nUnable to check server status", status);
+ if (motd) {
+ fprintf(stderr, "The SMS server is currently unavailable:\n%s\n", motd);
+ sms_disconnect();
+ exit(1);
+ }
+
if ( status = sms_auth(program_name) )
ErrorExit("\nAuthorization failed -- please run kinit", status);
(void) signal(SIGQUIT, SignalHandler);
#endif DEBUG
+ if (!strcmp(program_name, "listmaint"))
+ menu = &list_menu;
+ else if (!strcmp(program_name, "usermaint"))
+ menu = &user_menu;
+ else if (!strcmp(program_name, "dcmmaint"))
+ menu = &dcm_menu;
+ else
+ menu = &sms_top_menu;
+
if (use_menu) { /* Start menus that execute program */
Start_paging();
- Start_menu(&sms_top_menu);
+ Start_menu(menu);
Stop_paging();
}
else /* Start program without menus. */
- Start_no_menu(&sms_top_menu);
+ Start_no_menu(menu);
sms_disconnect();
exit(0);