This is main.c in view mode; [Download] [Up]
/* 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; { int xflg = 0, sflg = 0; char *prog; /* check for a 64-bit mis-compile */ if(sizeof(ylong) != 4) { if(sizeof(ylong) > 4) { fprintf(stderr, "You should have compiled ytalk with the -DY64BIT option.\n"); } else { #ifdef Y64BIT fprintf(stderr, "You should NOT have compiled ytalk with the -DY64BIT option.\n"); #else fprintf(stderr, "Your machine doesn't support 32-bit longs. Please mail\n"); fprintf(stderr, "ytalk@austin.eds.com your machine type and OS version.\n"); (void)exit(YTE_INIT); #endif } fprintf(stderr, "See the README file on how to update the appropriate\n"); fprintf(stderr, "makefile, then type 'make clean', 'make'.\n"); (void)exit(YTE_INIT); } /* search for options */ prog = *argv; argv++, argc--; while(argc > 0 && **argv == '-') { if(strcmp(*argv, "-x") == 0 || strcmp(*argv, "-nw") == 0) { xflg++; /* disable X from the command line */ argv++, argc--; } else if(strcmp(*argv, "-s") == 0) { sflg++; /* immediately start a shell */ argv++, argc--; } else argc = 0; /* force a Usage error */ } /* check for users */ if(argc <= 0) { fprintf(stderr, "Usage: %s [-x] user[@hostname][#tty]...\n", prog); (void)exit(YTE_INIT); } /* 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(); if(xflg) def_flags &= ~FL_XWIN; init_term(); init_socket(); for(; argc > 0; argc--, argv++) invite(*argv, 1); if(sflg) execute(NULL); else msg_term(me, "Waiting for connection..."); main_loop(); bail(YTE_SUCCESS); return 0; /* make lint happy */ }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.