home *** CD-ROM | disk | FTP | other *** search
- /* main.c */
-
- /* NOTICE
- *
- * Copyright (c) 1990,1992,1993 Britt Yenne. All rights reserved.
- *
- * This software is provided AS-IS. The author gives no warranty,
- * real or assumed, and takes no responsibility whatsoever for any
- * use or misuse of this software, or any damage created by its use
- * or misuse.
- *
- * This software may be freely copied and distributed provided that
- * no part of this NOTICE is deleted or edited in any manner.
- *
- */
-
- /* Mail comments or questions to ytalk@austin.eds.com */
-
- #include "header.h"
- #include <signal.h>
- #include "menu.h"
-
- char errstr[132]; /* temporary string for errors */
-
- /* Clean up and exit.
- */
- void
- bail(n)
- int n;
- {
- end_term();
- kill_auto();
- (void)exit(n);
- }
-
- /* Display an error.
- */
- void
- show_error(str)
- register char *str;
- {
- register char *syserr;
- static int in_error = 0;
-
- if(errno == 0)
- syserr = "(no system error)";
- else
- syserr = sys_errlist[errno];
-
- putc(7, stderr);
- if(in_error == 0 && what_term() != 0)
- {
- in_error = 1;
- if(show_error_menu(str, syserr) < 0)
- {
- show_error("show_error: show_error_menu() failed");
- show_error(str);
- }
- else
- update_menu();
- in_error = 0;
- }
- else
- {
- fprintf(stderr, "%s: %s\n", str, syserr);
- sleep(2);
- }
- }
-
- /* Allocate memory.
- */
- yaddr
- get_mem(n)
- int n;
- {
- register yaddr out;
- if((out = (yaddr)malloc(n)) == NULL)
- {
- show_error("malloc() failed");
- bail(YTE_NO_MEM);
- }
- return out;
- }
-
- /* Copy a string.
- */
- char *
- str_copy(str)
- register char *str;
- {
- register char *out;
- register int len;
-
- if(str == NULL)
- return NULL;
- len = strlen(str) + 1;
- out = get_mem(len);
- (void)memcpy(out, str, len);
- return out;
- }
-
- /* Reallocate memory.
- */
- yaddr
- realloc_mem(p, n)
- char *p;
- int n;
- {
- register yaddr out;
- if(p == NULL)
- return get_mem(n);
- if((out = (yaddr)realloc(p, n)) == NULL)
- {
- show_error("realloc() failed");
- bail(YTE_NO_MEM);
- }
- return out;
- }
-
- /* Process signals.
- */
- static void
- got_sig(n)
- int n;
- {
- if(n == SIGINT)
- bail(0);
- bail(YTE_SIGNAL);
- }
-
- /* MAIN */
- int
- main(argc, argv)
- int argc;
- char **argv;
- {
- if(argc <= 1)
- {
- fprintf(stderr, "Usage: %s user[@hostname][#tty] [user...]\n", *argv);
- (void)exit(YTE_INIT);
- }
- argv++, argc--;
-
- /* set up signals */
-
- signal(SIGINT, got_sig);
- signal(SIGHUP, got_sig);
- signal(SIGQUIT, got_sig);
- signal(SIGABRT, got_sig);
-
- /* set default options */
-
- def_flags = FL_XWIN;
-
- /* go for it! */
-
- errno = 0;
- init_fd();
- init_user();
- read_ytalkrc();
- init_term();
- init_socket();
- for(; argc > 0; argc--, argv++)
- invite(*argv, 1);
- msg_term(me, "Waiting for connection...");
- main_loop();
- bail(YTE_SUCCESS);
-
- return 0; /* make lint happy */
- }
-