SDL_quit.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.     SDL - Simple DirectMedia Layer
  3.     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
  4.     This library is free software; you can redistribute it and/or
  5.     modify it under the terms of the GNU Library General Public
  6.     License as published by the Free Software Foundation; either
  7.     version 2 of the License, or (at your option) any later version.
  8.     This library is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.     Library General Public License for more details.
  12.     You should have received a copy of the GNU Library General Public
  13.     License along with this library; if not, write to the Free
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15.     Sam Lantinga
  16.     slouken@libsdl.org
  17. */
  18. #ifdef SAVE_RCSID
  19. static char rcsid =
  20.  "@(#) $Id: SDL_quit.c,v 1.4 2002/04/22 21:38:02 wmay Exp $";
  21. #endif
  22. /* General quit handling code for SDL */
  23. #include <stdio.h>
  24. #ifndef NO_SIGNAL_H
  25. #include <signal.h>
  26. #endif
  27. #include "SDL_events.h"
  28. #include "SDL_events_c.h"
  29. #ifndef NO_SIGNAL_H
  30. static void SDL_HandleSIG(int sig)
  31. {
  32. /* Reset the signal handler */
  33. signal(sig, SDL_HandleSIG);
  34. /* Signal a quit interrupt */
  35. SDL_PrivateQuit();
  36. }
  37. #endif /* NO_SIGNAL_H */
  38. /* Public functions */
  39. int SDL_QuitInit(void)
  40. {
  41. #ifndef NO_SIGNAL_H
  42. void (*ohandler)(int);
  43. /* Both SIGINT and SIGTERM are translated into quit interrupts */
  44. ohandler = signal(SIGINT,  SDL_HandleSIG);
  45. if ( ohandler != SIG_DFL )
  46. signal(SIGINT, ohandler);
  47. ohandler = signal(SIGTERM, SDL_HandleSIG);
  48. if ( ohandler != SIG_DFL )
  49. signal(SIGTERM, ohandler);
  50. #endif /* NO_SIGNAL_H */
  51. /* That's it! */
  52. return(0);
  53. }
  54. /* This function returns 1 if it's okay to close the application window */
  55. int SDL_PrivateQuit(void)
  56. {
  57. int posted;
  58. posted = 0;
  59. if ( SDL_ProcessEvents[SDL_QUIT] == SDL_ENABLE ) {
  60. SDL_Event event;
  61. event.type = SDL_QUIT;
  62. if ( (SDL_EventOK == NULL) || (*SDL_EventOK)(&event) ) {
  63. posted = 1;
  64. SDL_PushEvent(&event);
  65. }
  66. }
  67. return(posted);
  68. }