Restore correct number of newlines after @items.
[kopensolaris-gnu/glibc.git] / manual / setjmp.texi
index a5de222..2732b6f 100644 (file)
@@ -10,13 +10,12 @@ do such @dfn{non-local exits} using the @code{setjmp} and @code{longjmp}
 functions.
 
 @menu
 functions.
 
 @menu
-* Introduction to Non-Local Exits::  An overview of how and when to use
-                                        these facilities.
-* Functions for Non-Local Exits::  Details of the interface.
-* Non-Local Exits and Blocked Signals::  Portability issues.
+* Intro: Non-Local Intro.        When and how to use these facilities.
+* Details: Non-Local Details.   Functions for nonlocal exits.
+* Non-Local Exits and Signals::  Portability issues.
 @end menu
 
 @end menu
 
-@node Introduction to Non-Local Exits, Functions for Non-Local Exits,  , Non-Local Exits
+@node Non-Local Intro, Non-Local Details,  , Non-Local Exits
 @section Introduction to Non-Local Exits
 
 As an example of a situation where a non-local exit can be useful,
 @section Introduction to Non-Local Exits
 
 As an example of a situation where a non-local exit can be useful,
@@ -58,27 +57,9 @@ statement.
 
 Here is how the example program described above might be set up:  
 
 
 Here is how the example program described above might be set up:  
 
-@example
-#include <setjmp.h>
-#include <stdio.h>
-
-jmp_buf main_loop;
-
-void abort_to_main_loop (void)
-@{
-  longjmp (main_loop, -1);
-@}
-
-main ()
-@{
-  extern void do_command (void);
-  while (1)
-    if (setjmp (main_loop))
-      printf ("Back at main loop....\n");
-    else
-      do_command ();
-@}
-@end example
+@smallexample
+@include setjmp.c.texi
+@end smallexample
 
 The function @code{abort_to_main_loop} causes an immediate transfer of
 control back to the main loop of the program, no matter where it is
 
 The function @code{abort_to_main_loop} causes an immediate transfer of
 control back to the main loop of the program, no matter where it is
@@ -93,19 +74,20 @@ mysterious at first, but it is actually a common idiom with
 to @code{setjmp} in @code{main} were returning a second time with a value
 of @code{-1}.
 
 to @code{setjmp} in @code{main} were returning a second time with a value
 of @code{-1}.
 
+@need 250
 So, the general pattern for using @code{setjmp} looks something like:
 
 So, the general pattern for using @code{setjmp} looks something like:
 
-@example
+@smallexample
 if (setjmp (@var{buffer}))
   /* @r{Code to clean up after premature return.} */
   @dots{}
 else
   /* @r{Code to be executed normally after setting up the return point.} */
   @dots{}
 if (setjmp (@var{buffer}))
   /* @r{Code to clean up after premature return.} */
   @dots{}
 else
   /* @r{Code to be executed normally after setting up the return point.} */
   @dots{}
-@end example
+@end smallexample
 
 
-@node Functions for Non-Local Exits, Non-Local Exits and Blocked Signals, Introduction to Non-Local Exits, Non-Local Exits
-@section Functions for Non-Local Exits
+@node Non-Local Details, Non-Local Exits and Signals, Non-Local Intro, Non-Local Exits
+@section Details of Non-Local Exits
 
 Here are the details on the functions and data structures used for
 performing non-local exits.  These facilities are declared in
 
 Here are the details on the functions and data structures used for
 performing non-local exits.  These facilities are declared in
@@ -122,12 +104,12 @@ identify a specific place to return to.
 
 @comment setjmp.h
 @comment ANSI
 
 @comment setjmp.h
 @comment ANSI
-@deftypefun int setjmp (jmp_buf @var{state})
+@deftypefn Macro int setjmp (jmp_buf @var{state})
 When called normally, @code{setjmp} stores information about the
 execution state of the program in @var{state} and returns zero.  If
 @code{longjmp} is later used to perform a non-local exit to this
 @var{state}, @code{setjmp} returns a nonzero value.
 When called normally, @code{setjmp} stores information about the
 execution state of the program in @var{state} and returns zero.  If
 @code{longjmp} is later used to perform a non-local exit to this
 @var{state}, @code{setjmp} returns a nonzero value.
-@end deftypefun
+@end deftypefn
 
 @comment setjmp.h
 @comment ANSI
 
 @comment setjmp.h
 @comment ANSI
@@ -146,10 +128,10 @@ present because non-local exits require a fair amount of magic on the
 part of the C compiler and can interact with other parts of the language
 in strange ways.
 
 part of the C compiler and can interact with other parts of the language
 in strange ways.
 
-The @code{setjmp} function may be implemented as a macro without an
-actual function definition, so you shouldn't try to @samp{#undef} it or
-take its address.  In addition, calls to @code{setjmp} are safe in only
-the following contexts:
+The @code{setjmp} function is actually a macro without an actual
+function definition, so you shouldn't try to @samp{#undef} it or take
+its address.  In addition, calls to @code{setjmp} are safe in only the
+following contexts:
 
 @itemize @bullet
 @item
 
 @itemize @bullet
 @item
@@ -186,8 +168,8 @@ function containing the @code{setjmp} call that have been changed since
 the call to @code{setjmp} are indeterminate, unless you have declared
 them @code{volatile}.
 
 the call to @code{setjmp} are indeterminate, unless you have declared
 them @code{volatile}.
 
-@node Non-Local Exits and Blocked Signals,  , Functions for Non-Local Exits, Non-Local Exits
-@section Non-Local Exits and Blocked Signals
+@node Non-Local Exits and Signals,, Non-Local Details, Non-Local Exits
+@section Non-Local Exits and Signals
 
 In BSD Unix systems, @code{setjmp} and @code{longjmp} also save and
 restore the set of blocked signals; see @ref{Blocking Signals}.  However,
 
 In BSD Unix systems, @code{setjmp} and @code{longjmp} also save and
 restore the set of blocked signals; see @ref{Blocking Signals}.  However,
@@ -224,6 +206,8 @@ of blocked signals is saved in @var{state} and will be restored if a
 @comment POSIX.1
 @deftypefun void siglongjmp (sigjmp_buf @var{state}, int @var{value})
 This is similar to @code{longjmp} except for the type of its @var{state}
 @comment POSIX.1
 @deftypefun void siglongjmp (sigjmp_buf @var{state}, int @var{value})
 This is similar to @code{longjmp} except for the type of its @var{state}
-argument.
+argument.  If the @code{sigsetjmp} call that set this @var{state} used a
+nonzero @var{savesigs} flag, @code{siglongjmp} also restores the set of
+blocked signals.
 @end deftypefun
 
 @end deftypefun