home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume27 / ytalk-3.0 / part01 / main.c < prev    next >
C/C++ Source or Header  |  1993-08-20  |  3KB  |  171 lines

  1. /* main.c */
  2.  
  3. /*               NOTICE
  4.  *
  5.  * Copyright (c) 1990,1992,1993 Britt Yenne.  All rights reserved.
  6.  * 
  7.  * This software is provided AS-IS.  The author gives no warranty,
  8.  * real or assumed, and takes no responsibility whatsoever for any 
  9.  * use or misuse of this software, or any damage created by its use
  10.  * or misuse.
  11.  * 
  12.  * This software may be freely copied and distributed provided that
  13.  * no part of this NOTICE is deleted or edited in any manner.
  14.  * 
  15.  */
  16.  
  17. /* Mail comments or questions to ytalk@austin.eds.com */
  18.  
  19. #include "header.h"
  20. #include <signal.h>
  21. #include "menu.h"
  22.  
  23. char errstr[132];    /* temporary string for errors */
  24.  
  25. /* Clean up and exit.
  26.  */
  27. void
  28. bail(n)
  29.   int n;
  30. {
  31.     end_term();
  32.     kill_auto();
  33.     (void)exit(n);
  34. }
  35.  
  36. /* Display an error.
  37.  */
  38. void
  39. show_error(str)
  40.   register char *str;
  41. {
  42.     register char *syserr;
  43.     static int in_error = 0;
  44.  
  45.     if(errno == 0)
  46.     syserr = "(no system error)";
  47.     else
  48.     syserr = sys_errlist[errno];
  49.  
  50.     putc(7, stderr);
  51.     if(in_error == 0 && what_term() != 0)
  52.     {
  53.     in_error = 1;
  54.     if(show_error_menu(str, syserr) < 0)
  55.     {
  56.         show_error("show_error: show_error_menu() failed");
  57.         show_error(str);
  58.     }
  59.     else
  60.         update_menu();
  61.     in_error = 0;
  62.     }
  63.     else
  64.     {
  65.     fprintf(stderr, "%s: %s\n", str, syserr);
  66.     sleep(2);
  67.     }
  68. }
  69.  
  70. /* Allocate memory.
  71.  */
  72. yaddr
  73. get_mem(n)
  74.   int n;
  75. {
  76.     register yaddr out;
  77.     if((out = (yaddr)malloc(n)) == NULL)
  78.     {
  79.     show_error("malloc() failed");
  80.     bail(YTE_NO_MEM);
  81.     }
  82.     return out;
  83. }
  84.  
  85. /* Copy a string.
  86.  */
  87. char *
  88. str_copy(str)
  89.   register char *str;
  90. {
  91.     register char *out;
  92.     register int len;
  93.  
  94.     if(str == NULL)
  95.     return NULL;
  96.     len = strlen(str) + 1;
  97.     out = get_mem(len);
  98.     (void)memcpy(out, str, len);
  99.     return out;
  100. }
  101.  
  102. /* Reallocate memory.
  103.  */
  104. yaddr
  105. realloc_mem(p, n)
  106.   char *p;
  107.   int n;
  108. {
  109.     register yaddr out;
  110.     if(p == NULL)
  111.     return get_mem(n);
  112.     if((out = (yaddr)realloc(p, n)) == NULL)
  113.     {
  114.     show_error("realloc() failed");
  115.     bail(YTE_NO_MEM);
  116.     }
  117.     return out;
  118. }
  119.  
  120. /* Process signals.
  121.  */
  122. static void
  123. got_sig(n)
  124.   int n;
  125. {
  126.     if(n == SIGINT)
  127.     bail(0);
  128.     bail(YTE_SIGNAL);
  129. }
  130.  
  131. /*  MAIN  */
  132. int
  133. main(argc, argv)
  134.   int argc;
  135.   char **argv;
  136. {
  137.     if(argc <= 1)
  138.     {
  139.     fprintf(stderr, "Usage: %s user[@hostname][#tty] [user...]\n", *argv);
  140.     (void)exit(YTE_INIT);
  141.     }
  142.     argv++, argc--;
  143.  
  144.     /* set up signals */
  145.  
  146.     signal(SIGINT, got_sig);
  147.     signal(SIGHUP, got_sig);
  148.     signal(SIGQUIT, got_sig);
  149.     signal(SIGABRT, got_sig);
  150.  
  151.     /* set default options */
  152.  
  153.     def_flags = FL_XWIN;
  154.  
  155.     /* go for it! */
  156.  
  157.     errno = 0;
  158.     init_fd();
  159.     init_user();
  160.     read_ytalkrc();
  161.     init_term();
  162.     init_socket();
  163.     for(; argc > 0; argc--, argv++)
  164.     invite(*argv, 1);
  165.     msg_term(me, "Waiting for connection...");
  166.     main_loop();
  167.     bail(YTE_SUCCESS);
  168.  
  169.     return 0;    /* make lint happy */
  170. }
  171.