~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to dos/signal.c

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This is file signal.c
 
2
**
 
3
** Copyright (C) 1992 Rami EL CHARIF and William SCHELTER
 
4
** rcharif@ma.utexas.edu   wfs@cs.utexas.edu
 
5
**
 
6
** Signal package for djgpp versions 1.05, 1.06
 
7
** version 0.0 alpha  03/30/1992
 
8
**
 
9
** Send your comments or bugs report to
 
10
** rcharif@ma.utexas.edu or wfs@cs.utexas.edu
 
11
**
 
12
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
 
13
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
14
*/
 
15
 
 
16
#include <stdio.h>
 
17
#include <dos.h>
 
18
#include <signal.h>
 
19
 
 
20
unsigned long SignalTable[_NSIG + 1] = {
 
21
   (unsigned long)SIG_DFL,       /* SIGHUP         */
 
22
   (unsigned long)SIG_DFL,       /* SIGINT        +*/
 
23
   (unsigned long)SIG_DFL,       /* SIGQUIT        */
 
24
   (unsigned long)SIG_DFL,       /* SIGILL         */
 
25
   (unsigned long)SIG_DFL,       /* SIGABRT        */
 
26
   (unsigned long)SIG_DFL,       /* SIGTRAP        */
 
27
   (unsigned long)SIG_DFL,       /* SIGIOT         */
 
28
   (unsigned long)SIG_DFL,       /* SIGEMT         */
 
29
   (unsigned long)SIG_DFL,       /* SIGFPE         */
 
30
   (unsigned long)SIG_DFL,       /* SIGKILL        */
 
31
   (unsigned long)SIG_DFL,       /* SIGBUS         */
 
32
   (unsigned long)SIG_DFL,       /* SIGSEGV       +*/
 
33
   (unsigned long)SIG_DFL,       /* SIGSYS         */
 
34
   (unsigned long)SIG_DFL,       /* SIGPIPE        */
 
35
   (unsigned long)SIG_DFL,       /* SIGALRM        */
 
36
   (unsigned long)SIG_DFL,       /* SIGTERM        */
 
37
   (unsigned long)SIG_DFL,       /* SIGURG         */
 
38
   (unsigned long)SIG_DFL,       /* SIGSTOP        */
 
39
   (unsigned long)SIG_DFL,       /* SIGTSTP        */
 
40
   (unsigned long)SIG_DFL,       /* SIGCONT        */
 
41
   (unsigned long)SIG_DFL,       /* SIGCHLD        */
 
42
   (unsigned long)SIG_DFL,       /* SIGCLD         */
 
43
   (unsigned long)SIG_DFL,       /* SIGTTIN        */
 
44
   (unsigned long)SIG_DFL,       /* SIGTTOU        */
 
45
   (unsigned long)SIG_DFL,       /* SIGIO          */
 
46
   (unsigned long)SIG_DFL,       /* SIGPOLL        */
 
47
   (unsigned long)SIG_DFL,       /* SIGXCPU        */
 
48
   (unsigned long)SIG_DFL,       /* SIGXFSZ        */
 
49
   (unsigned long)SIG_DFL,       /* SIGVTALRM   */
 
50
   (unsigned long)SIG_DFL,       /* SIGPROF        */
 
51
   (unsigned long)SIG_DFL,       /* SIGWINCH    */
 
52
   (unsigned long)SIG_DFL,       /* SIGUSR1        */
 
53
   (unsigned long)SIG_DFL        /* SIGUSR2        */
 
54
   };
 
55
 
 
56
SignalHandler signal(int sig, SignalHandler action)
 
57
{
 
58
 extern void SignalManager();
 
59
 union REGS in, out;
 
60
 SignalHandler hsigOld;
 
61
 
 
62
   in.h.ah = 1;
 
63
   in.h.al = sig;
 
64
   SignalTable[sig] = in.x.dx = (long)action;
 
65
   in.x.cx = (long)SignalManager;
 
66
   int86(0xfa, &in, &out);
 
67
   hsigOld = (SignalHandler)out.x.dx;
 
68
   return hsigOld;
 
69
}
 
70
 
 
71
void SigInst()
 
72
{
 
73
 union REGS in, out;
 
74
 extern void SignalManager();
 
75
 
 
76
   in.h.ah = 0;
 
77
   in.h.al = 0;
 
78
   in.x.dx = (long)SignalManager;
 
79
 
 
80
#ifdef DEBUG_SIG
 
81
   printf("\nSignal Manager = %ld, %lx", in.x.dx, in.x.dx);
 
82
#endif
 
83
 
 
84
   int86(0xfa, &in, &out);
 
85
 
 
86
}
 
87
 
 
88
#ifndef NO_SIG_ALARM
 
89
unsigned int alarm(int culSeconds)
 
90
{
 
91
 
 
92
 union REGS in, out;
 
93
 
 
94
   if (!culSeconds) {
 
95
      in.h.ah = 3;   /* Reset alarm */
 
96
      int86(0xfa, &in, &out);
 
97
      }
 
98
   else {
 
99
      in.h.ah = 2;
 
100
      in.x.dx = culSeconds;
 
101
      int86(0xfa, &in, &out);
 
102
      }
 
103
   return in.x.cx;
 
104
}
 
105
#else
 
106
unsigned int alarm(int n)
 
107
{  return 0; }
 
108
#endif
 
109