home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / ckermit.tar.Z / ckermit.tar / ckusig.h < prev    next >
C/C++ Source or Header  |  2004-03-14  |  2KB  |  80 lines

  1. /*  C K U S I G . H  */
  2.  
  3. /*  Definitions and prototypes for signal handling  */
  4.  
  5. /*
  6.   Author: Jeffrey E Altman (jaltman@secure-endpoints.com),
  7.             Secure Endpoints Inc., New York City.
  8.  
  9.   Copyright (C) 1985, 2004,
  10.     Trustees of Columbia University in the City of New York.
  11.     All rights reserved.  See the C-Kermit COPYING.TXT file or the
  12.     copyright text in the ckcmai.c module for disclaimer and permissions.
  13. */
  14.  
  15. #ifdef CK_ANSIC
  16. typedef void (*ck_sigfunc)(void *);
  17. typedef void (*ck_sighand)(int);
  18. #else
  19. typedef VOID (*ck_sigfunc)();
  20. typedef VOID (*ck_sighand)();
  21. #endif /* CK_ANSIC */
  22.  
  23. /* Macros for POSIX vs old-style signal handling. */
  24.  
  25. #ifdef CK_POSIX_SIG
  26. typedef sigjmp_buf ckjmpbuf;
  27. #else
  28. typedef jmp_buf ckjmpbuf;
  29. #endif /* CK_POSIX_SIG */
  30. /*
  31.   Suppose you want to pass the address of a jmp_buf bar to a function foo.
  32.   Since jmp_buf is normally defined (typedef'd) as an array, you would do
  33.   it like this:  foo(bar), where foo = foo(jmp_buf bar).  But suppose a
  34.   jmp_buf is (say) a struct rather than an array.  Then you must do
  35.   foo(&bar) where foo is foo(jmp_buf * bar).  This is controlled here in
  36.   the traditional fashion, by ifdefs.  By default, we assume that jmp_buf
  37.   is an array.  Define the symbol JBNOTARRAY if jmp_buf is not an array.
  38. */
  39. #ifndef JBNOTARRAY
  40. #ifdef NT
  41. #define JBNOTARRAY
  42. #endif /* NT */
  43. #endif /* JBNOTARRAY */
  44.  
  45. #ifdef JBNOTARRAY
  46. typedef ckjmpbuf * ckjptr;
  47. #define ckjaddr(x) & x
  48. #define ckjdref(x) * x
  49. #ifdef CK_POSIX_SIG
  50. #define cksetjmp(x) sigsetjmp(x,1)
  51. #else
  52. #define cksetjmp(x) setjmp(x,1)
  53. #endif /* CK_POSIX_SIG */
  54. #else  /* jmp_buf is an array */
  55. typedef ckjmpbuf ckjptr;
  56. #define ckjaddr(x) x
  57. #define ckjdref(x) x
  58. #ifdef CK_POSIX_SIG
  59. #define cksetjmp sigsetjmp
  60. #else
  61. #define cksetjmp setjmp
  62. #endif /* CK_POSIX_SIG */
  63. #endif /* JBNOTARRAY */
  64.  
  65. _PROTOTYP( int cc_execute, (ckjptr, ck_sigfunc, ck_sigfunc) );
  66. _PROTOTYP( int alrm_execute,
  67.       (ckjptr,
  68.        int timo,
  69.        ck_sighand handler,
  70.        ck_sigfunc, ck_sigfunc) );
  71. _PROTOTYP( int cc_alrm_execute,
  72.       (ckjptr,
  73.        int timo,
  74.        ck_sighand handler,
  75.        ck_sigfunc,
  76.        ck_sigfunc) );
  77.  
  78. /* End of ckusig.h */
  79.  
  80.