static void panic(const char *m) { treset(); fprintf(stderr, "Panic: %s\n", m); exit(1); }
void tcont(void) { tsignal(); treset(g_old_term, 1); tresize(0, 0); free(g_old_term); g_old_term = NULL; }
void sigctrlc(int signum) { if (signum == SIGINT) { reinit(); treset(datast()); } exit(-1); }
int error(int quit, char *msg, t_data *data) { write(2, msg, ft_strlen(msg)); if (data) treset(data); if (quit) exit(-1); return (-1); }
void sigsegv(int signum) { if (signum == SIGSEGV) { reinit(); treset(datast()); write(2, "Unauthorized action\n", 20); } exit(-1); }
static int exit_handler(void) { show_line(1); treset(data()); return (EXIT); }
int main(int argc, char *argv[]) { const char *user = getenv("USER"); const char *ircnick = getenv("IRCNICK"); const char *server = SRV; unsigned short port = PORT; int o; while ((o=getopt(argc, argv, "hn:u:s:p:"))>=0) switch (o) { case 'h': case '?': usage: fputs("Usage: irc [-n NICK] [-u USER] [-s SERVER] [-p PORT] [-h]\n", stderr); exit(0); case 'n': if (strlen(optarg)>=sizeof nick) goto usage; strcpy(nick, optarg); break; case 'u': user = optarg; break; case 's': server = optarg; break; case 'p': if (!(port=strtol(optarg, 0, 0))) goto usage; break; } if (!nick[0] && ircnick && strlen(ircnick)<sizeof nick) strcpy(nick, ircnick); if (!nick[0]) goto usage; if (!user) user = "******"; tinit(); sfd = dial(server, port); chadd("*server*"); sndf("NICK %s", nick); sndf("USER %s 8 * :%s", user, user); sndf("MODE %s +i", nick); while (!quit) { fd_set rfs, wfs; int ret; if (winchg) tresize(); FD_ZERO(&wfs); FD_ZERO(&rfs); FD_SET(0, &rfs); FD_SET(sfd, &rfs); if (outp!=outb) FD_SET(sfd, &wfs); ret=select(sfd+1, &rfs, &wfs, 0, 0); if (ret<0) { if (errno==EINTR) continue; panic("Select failed."); } if (FD_ISSET(sfd, &rfs)) { if (!srd()) quit=1; } if (FD_ISSET(sfd, &wfs)) { int wr; wr=write(sfd, outb, outp-outb); if (wr<0) { if (errno==EINTR) continue; panic("Write error."); } if (wr==0) continue; outp-=wr; memmove(outb, outb+wr, outp-outb); } if (FD_ISSET(0, &rfs)) { tgetch(); wrefresh(scr.iw); } } close(sfd); while (nch--) free(chl[nch].buf); treset(); exit(0); }