You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rmsetjmp.h 630B

12345678910111213141516171819202122232425262728
  1. #ifndef _RMSETJMP_H
  2. #define _RMSETJMP_H
  3. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  4. #include <setjmp.h>
  5. #include <realmode.h>
  6. /** A real-mode-extended jump buffer */
  7. typedef struct {
  8. /** Jump buffer */
  9. jmp_buf env;
  10. /** Real-mode stack pointer */
  11. segoff_t rm_stack;
  12. } rmjmp_buf[1];
  13. #define rmsetjmp( _env ) ( { \
  14. (_env)->rm_stack.segment = rm_ss; \
  15. (_env)->rm_stack.offset = rm_sp; \
  16. setjmp ( (_env)->env ); } ) \
  17. #define rmlongjmp( _env, _val ) do { \
  18. rm_ss = (_env)->rm_stack.segment; \
  19. rm_sp = (_env)->rm_stack.offset; \
  20. longjmp ( (_env)->env, (_val) ); \
  21. } while ( 0 )
  22. #endif /* _RMSETJMP_H */