]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - larn/signal.c
Larn now builds with WARNS=4.
[bsdgames-darwin.git] / larn / signal.c
index 60bd6ce1270bd1fd85cb6d4c302862ed4d347405..42493424a6764d3251359e1680ec6eb7515920d0 100644 (file)
+/*     $NetBSD: signal.c,v 1.8 2004/01/27 20:30:30 jsm Exp $   */
+
+/* "Larn is copyrighted 1986 by Noah Morgan.\n" */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: signal.c,v 1.8 2004/01/27 20:30:30 jsm Exp $");
+#endif /* not lint */
+
 #include <signal.h>
-#include "header.h"                    /* "Larn is copyrighted 1986 by Noah Morgan.\n" */
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "header.h"
+#include "extern.h"
+
+static void s2choose(void);
+static void cntlc(int);
+static void sgam(int);
+static void tstop(int);
+static void sigpanic(int);
+
 #define BIT(a) (1<<((a)-1))
-extern char savefilename[],wizard,predostuff,nosignal;
-static s2choose()      /* text to be displayed if ^C during intro screen */
-       {
-       cursor(1,24); lprcat("Press "); setbold(); lprcat("return"); resetbold();
-       lprcat(" to continue: ");   lflush(); 
-       }
 
 static void
-cntlc()        /* what to do for a ^C */
-       {
-       if (nosignal) return;   /* don't do anything if inhibited */
-       signal(SIGQUIT,SIG_IGN);        signal(SIGINT,SIG_IGN);
-       quit(); if (predostuff==1) s2choose(); else showplayer();
+s2choose()
+{                              /* text to be displayed if ^C during intro
+                                * screen */
+       cursor(1, 24);
+       lprcat("Press ");
+       setbold();
+       lprcat("return");
+       resetbold();
+       lprcat(" to continue: ");
+       lflush();
+}
+
+static void
+cntlc(n)
+       int n;
+{                              /* what to do for a ^C */
+       if (nosignal)
+               return;         /* don't do anything if inhibited */
+       signal(SIGQUIT, SIG_IGN);
+       signal(SIGINT, SIG_IGN);
+       quit();
+       if (predostuff == 1)
+               s2choose();
+       else
+               showplayer();
        lflush();
-       signal(SIGQUIT,cntlc);  signal(SIGINT,cntlc);
-       }
+       signal(SIGQUIT, cntlc);
+       signal(SIGINT, cntlc);
+}
 
 /*
  *     subroutine to save the game if a hangup signal
  */
 static void
-sgam()
-       {
-       savegame(savefilename);  wizard=1;  died(-257); /* hangup signal */
-       }
+sgam(n)
+       int n;
+{
+       savegame(savefilename);
+       wizard = 1;
+       died(-257);             /* hangup signal */
+}
 
 #ifdef SIGTSTP
 static void
-tstop() /* control Y   */
-       {
-       if (nosignal)   return;  /* nothing if inhibited */
-       lcreat((char*)0);  clearvt100();        lflush();         signal(SIGTSTP,SIG_DFL);
+tstop(n)
+       int n;
+{                              /* control Y     */
+       if (nosignal)
+               return;         /* nothing if inhibited */
+       lcreat((char *) 0);
+       clearvt100();
+       lflush();
+       signal(SIGTSTP, SIG_DFL);
 #ifdef SIGVTALRM
-       /* looks like BSD4.2 or higher - must clr mask for signal to take effect*/
-       sigsetmask(sigblock(0)& ~BIT(SIGTSTP));
+       /*
+        * looks like BSD4.2 or higher - must clr mask for signal to take
+        * effect
+        */
+       sigsetmask(sigblock(0) & ~BIT(SIGTSTP));
 #endif
-       kill(getpid(),SIGTSTP);
+       kill(getpid(), SIGTSTP);
 
-       setupvt100();  signal(SIGTSTP,tstop);
-       if (predostuff==1) s2choose(); else drawscreen();
-       showplayer();   lflush();
-       }
-#endif SIGTSTP
+       setupvt100();
+       signal(SIGTSTP, tstop);
+       if (predostuff == 1)
+               s2choose();
+       else
+               drawscreen();
+       showplayer();
+       lflush();
+}
+#endif /* SIGTSTP */
 
 /*
  *     subroutine to issue the needed signal traps  called from main()
  */
-static void sigpanic();
-static void sigill()   { sigpanic(SIGILL); }
-static void sigtrap()  { sigpanic(SIGTRAP); }
-static void sigiot()   { sigpanic(SIGIOT); }
-static void sigemt()   { sigpanic(SIGEMT); }
-static void sigfpe()   { sigpanic(SIGFPE); }
-static void sigbus()   { sigpanic(SIGBUS); }
-static void sigsegv()  { sigpanic(SIGSEGV); }
-static void sigsys()   { sigpanic(SIGSYS); }
-static void sigpipe()  { sigpanic(SIGPIPE); }
-static void sigterm()  { sigpanic(SIGTERM); }
+void
 sigsetup()
-       {
-       signal(SIGQUIT, cntlc);                 signal(SIGINT,  cntlc); 
-       signal(SIGKILL, SIG_IGN);               signal(SIGHUP,  sgam);
-       signal(SIGILL,  sigill);                signal(SIGTRAP, sigtrap);
-       signal(SIGIOT,  sigiot);                signal(SIGEMT,  sigemt);
-       signal(SIGFPE,  sigfpe);                signal(SIGBUS,  sigbus);
-       signal(SIGSEGV, sigsegv);               signal(SIGSYS,  sigsys);
-       signal(SIGPIPE, sigpipe);               signal(SIGTERM, sigterm);
+{
+       signal(SIGQUIT, cntlc);
+       signal(SIGINT, cntlc);
+       signal(SIGKILL, SIG_IGN);
+       signal(SIGHUP, sgam);
+       signal(SIGILL, sigpanic);
+       signal(SIGTRAP, sigpanic);
+       signal(SIGIOT, sigpanic);
+       signal(SIGEMT, sigpanic);
+       signal(SIGFPE, sigpanic);
+       signal(SIGBUS, sigpanic);
+       signal(SIGSEGV, sigpanic);
+       signal(SIGSYS, sigpanic);
+       signal(SIGPIPE, sigpanic);
+       signal(SIGTERM, sigpanic);
 #ifdef SIGTSTP
-       signal(SIGTSTP,tstop);          signal(SIGSTOP,tstop);
-#endif SIGTSTP
-       }
-
-#ifdef BSD     /* for BSD UNIX? */
-
-static char *signame[NSIG] = { "",
-"SIGHUP",  /*  1        hangup */
-"SIGINT",  /*  2        interrupt */
-"SIGQUIT", /*  3        quit */
-"SIGILL",  /*  4        illegal instruction (not reset when caught) */
-"SIGTRAP", /*  5        trace trap (not reset when caught) */
-"SIGIOT",  /*  6        IOT instruction */
-"SIGEMT",  /*  7        EMT instruction */
-"SIGFPE",  /*  8        floating point exception */
-"SIGKILL", /*  9        kill (cannot be caught or ignored) */
-"SIGBUS",  /*  10       bus error */
-"SIGSEGV", /*  11       segmentation violation */
-"SIGSYS",  /*  12       bad argument to system call */
-"SIGPIPE", /*  13       write on a pipe with no one to read it */
-"SIGALRM", /*  14       alarm clock */
-"SIGTERM", /*  15       software termination signal from kill */
-"SIGURG",  /*  16       urgent condition on IO channel */
-"SIGSTOP", /*  17       sendable stop signal not from tty */
-"SIGTSTP", /*  18       stop signal from tty */
-"SIGCONT", /*  19       continue a stopped process */
-"SIGCHLD", /*  20       to parent on child stop or exit */
-"SIGTTIN", /*  21       to readers pgrp upon background tty read */
-"SIGTTOU", /*  22       like TTIN for output if (tp->t_local&LTOSTOP) */
-"SIGIO",   /*  23       input/output possible signal */
-"SIGXCPU", /*  24       exceeded CPU time limit */
-"SIGXFSZ", /*  25       exceeded file size limit */
-"SIGVTALRM",/*  26      virtual time alarm */
-"SIGPROF", /*  27       profiling time alarm */
-"","","","" };
-
-#else BSD      /* for system V? */
-
-static char *signame[NSIG] = { "",
-"SIGHUP",  /*  1        hangup */
-"SIGINT",  /*  2        interrupt */
-"SIGQUIT", /*  3        quit */
-"SIGILL",  /*  4        illegal instruction (not reset when caught) */
-"SIGTRAP", /*  5        trace trap (not reset when caught) */
-"SIGIOT",  /*  6        IOT instruction */
-"SIGEMT",  /*  7        EMT instruction */
-"SIGFPE",  /*  8        floating point exception */
-"SIGKILL", /*  9        kill (cannot be caught or ignored) */
-"SIGBUS",  /*  10       bus error */
-"SIGSEGV", /*  11       segmentation violation */
-"SIGSYS",  /*  12       bad argument to system call */
-"SIGPIPE", /*  13       write on a pipe with no one to read it */
-"SIGALRM", /*  14       alarm clock */
-"SIGTERM", /*  15       software termination signal from kill */
-"SIGUSR1",  /* 16       user defines signal 1 */
-"SIGUSR2", /*  17       user defines signal 2 */
-"SIGCLD",  /*  18       child death */
-"SIGPWR",  /*  19       power fail */
-"","","","","","","","","","","","" };
-
-#endif BSD
+       signal(SIGTSTP, tstop);
+       signal(SIGSTOP, tstop);
+#endif /* SIGTSTP */
+}
 
 /*
  *     routine to process a fatal error signal
  */
 static void
 sigpanic(sig)
-       int sig;
-       {
-       char buf[128];
-       signal(sig,SIG_DFL);
-       sprintf(buf,"\nLarn - Panic! Signal %d received [%s]",sig,signame[sig]);
-       write(2,buf,strlen(buf));  sleep(2);
+       int             sig;
+{
+       char            buf[128];
+       signal(sig, SIG_DFL);
+       snprintf(buf, sizeof(buf),
+           "\nLarn - Panic! Signal %d received [SIG%s]", sig,
+           sys_signame[sig]);
+       write(2, buf, strlen(buf));
+       sleep(2);
        sncbr();
-       savegame(savefilename); 
-       kill(getpid(),sig); /* this will terminate us */
-       }
+       savegame(savefilename);
+       kill(getpid(), sig);    /* this will terminate us */
+}