Artifact b51dbff4faa23ebc27c33b94d1f85c8c002a41bf:


0000: 3c 48 45 41 44 3e 0a 3c 54 49 54 4c 45 3e 20 43  <HEAD>.<TITLE> C
0010: 41 4c 4c 42 41 43 4b 20 6d 61 6e 75 61 6c 20 70  ALLBACK manual p
0020: 61 67 65 20 3c 2f 54 49 54 4c 45 3e 0a 3c 2f 48  age </TITLE>.</H
0030: 45 41 44 3e 0a 3c 42 4f 44 59 3e 0a 3c 48 31 3e  EAD>.<BODY>.<H1>
0040: 43 41 4c 4c 42 41 43 4b 20 6d 61 6e 75 61 6c 20  CALLBACK manual 
0050: 70 61 67 65 3c 2f 48 31 3e 0a 0a 3c 55 4c 3e 0a  page</H1>..<UL>.
0060: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 4e  <LI> <A HREF="#N
0070: 61 6d 65 22 3e 4e 61 6d 65 3c 2f 41 3e 0a 3c 4c  ame">Name</A>.<L
0080: 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 53 79 6e  I> <A HREF="#Syn
0090: 6f 70 73 69 73 22 3e 53 79 6e 6f 70 73 69 73 3c  opsis">Synopsis<
00a0: 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 48 52 45 46  /A>.<LI> <A HREF
00b0: 3d 22 23 44 65 73 63 72 69 70 74 69 6f 6e 22 3e  ="#Description">
00c0: 44 65 73 63 72 69 70 74 69 6f 6e 3c 2f 41 3e 0a  Description</A>.
00d0: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 56  <LI> <A HREF="#V
00e0: 41 43 41 4c 4c 20 6d 61 63 72 6f 73 22 3e 56 41  ACALL macros">VA
00f0: 43 41 4c 4c 20 6d 61 63 72 6f 73 3c 2f 41 3e 0a  CALL macros</A>.
0100: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 4e  <LI> <A HREF="#N
0110: 6f 74 65 73 22 3e 4e 6f 74 65 73 3c 2f 41 3e 0a  otes">Notes</A>.
0120: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 53  <LI> <A HREF="#S
0130: 65 65 20 61 6c 73 6f 22 3e 53 65 65 20 61 6c 73  ee also">See als
0140: 6f 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 48 52  o</A>.<LI> <A HR
0150: 45 46 3d 22 23 42 75 67 73 22 3e 42 75 67 73 3c  EF="#Bugs">Bugs<
0160: 2f 41 3e 0a 3c 4c 49 3e 20 3c 41 20 48 52 45 46  /A>.<LI> <A HREF
0170: 3d 22 23 4e 6f 6e 2d 42 75 67 73 22 3e 4e 6f 6e  ="#Non-Bugs">Non
0180: 2d 42 75 67 73 3c 2f 41 3e 0a 3c 4c 49 3e 20 3c  -Bugs</A>.<LI> <
0190: 41 20 48 52 45 46 3d 22 23 50 6f 72 74 69 6e 67  A HREF="#Porting
01a0: 22 3e 50 6f 72 74 69 6e 67 3c 2f 41 3e 0a 3c 4c  ">Porting</A>.<L
01b0: 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 41 75 74  I> <A HREF="#Aut
01c0: 68 6f 72 22 3e 41 75 74 68 6f 72 3c 2f 41 3e 0a  hor">Author</A>.
01d0: 3c 4c 49 3e 20 3c 41 20 48 52 45 46 3d 22 23 41  <LI> <A HREF="#A
01e0: 63 6b 6e 6f 77 6c 65 64 67 65 6d 65 6e 74 73 22  cknowledgements"
01f0: 3e 41 63 6b 6e 6f 77 6c 65 64 67 65 6d 65 6e 74  >Acknowledgement
0200: 73 3c 2f 41 3e 0a 3c 2f 55 4c 3e 0a 3c 50 3e 0a  s</A>.</UL>.<P>.
0210: 0a 3c 48 52 3e 0a 0a 3c 41 20 4e 41 4d 45 3d 22  .<HR>..<A NAME="
0220: 4e 61 6d 65 22 3e 0a 3c 48 32 3e 4e 61 6d 65 3c  Name">.<H2>Name<
0230: 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 63 61 6c 6c 62  /H2>.</A>..callb
0240: 61 63 6b 20 2d 20 63 6c 6f 73 75 72 65 73 20 77  ack - closures w
0250: 69 74 68 20 76 61 72 69 61 62 6c 65 20 61 72 67  ith variable arg
0260: 75 6d 65 6e 74 73 20 61 73 20 66 69 72 73 74 2d  uments as first-
0270: 63 6c 61 73 73 0a 43 20 66 75 6e 63 74 69 6f 6e  class.C function
0280: 73 0a 0a 3c 41 20 4e 41 4d 45 3d 22 53 79 6e 6f  s..<A NAME="Syno
0290: 70 73 69 73 22 3e 0a 3c 48 32 3e 53 79 6e 6f 70  psis">.<H2>Synop
02a0: 73 69 73 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 3c  sis</H2>.</A>..<
02b0: 50 52 45 3e 0a 3c 43 4f 44 45 3e 23 69 6e 63 6c  PRE>.<CODE>#incl
02c0: 75 64 65 20 26 6c 74 3b 63 61 6c 6c 62 61 63 6b  ude &lt;callback
02d0: 2e 68 26 67 74 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f  .h&gt;</CODE>.</
02e0: 50 52 45 3e 0a 3c 50 3e 0a 3c 50 52 45 3e 0a 3c  PRE>.<P>.<PRE>.<
02f0: 43 4f 44 45 3e 76 6f 69 64 20 3c 56 41 52 3e 66  CODE>void <VAR>f
0300: 75 6e 63 74 69 6f 6e 3c 2f 56 41 52 3e 20 28 3c  unction</VAR> (<
0310: 56 41 52 3e 64 61 74 61 3c 2f 56 41 52 3e 2c 20  VAR>data</VAR>, 
0320: 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e  <VAR>alist</VAR>
0330: 29 3c 2f 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 20  )</CODE>.<CODE> 
0340: 20 76 6f 69 64 2a 20 3c 56 41 52 3e 64 61 74 61   void* <VAR>data
0350: 3c 2f 56 41 52 3e 3b 3c 2f 43 4f 44 45 3e 0a 3c  </VAR>;</CODE>.<
0360: 43 4f 44 45 3e 20 20 76 61 5f 61 6c 69 73 74 20  CODE>  va_alist 
0370: 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41 52 3e  <VAR>alist</VAR>
0380: 3b 3c 2f 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 7b  ;</CODE>.<CODE>{
0390: 3c 2f 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 20 20  </CODE>.<CODE>  
03a0: 76 61 5f 73 74 61 72 74 5f 3c 56 41 52 3e 74 79  va_start_<VAR>ty
03b0: 70 65 3c 2f 56 41 52 3e 28 3c 56 41 52 3e 61 6c  pe</VAR>(<VAR>al
03c0: 69 73 74 3c 2f 56 41 52 3e 5b 2c 20 3c 56 41 52  ist</VAR>[, <VAR
03d0: 3e 72 65 74 75 72 6e 5f 74 79 70 65 3c 2f 56 41  >return_type</VA
03e0: 52 3e 5d 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 43 4f  R>]);</CODE>.<CO
03f0: 44 45 3e 20 20 61 72 67 20 3d 20 76 61 5f 61 72  DE>  arg = va_ar
0400: 67 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52  g_<VAR>type</VAR
0410: 3e 28 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56 41  >(<VAR>alist</VA
0420: 52 3e 5b 2c 20 3c 56 41 52 3e 61 72 67 5f 74 79  R>[, <VAR>arg_ty
0430: 70 65 3c 2f 56 41 52 3e 5d 29 3b 3c 2f 43 4f 44  pe</VAR>]);</COD
0440: 45 3e 0a 3c 43 4f 44 45 3e 20 20 76 61 5f 72 65  E>.<CODE>  va_re
0450: 74 75 72 6e 5f 3c 56 41 52 3e 74 79 70 65 3c 2f  turn_<VAR>type</
0460: 56 41 52 3e 28 3c 56 41 52 3e 61 6c 69 73 74 3c  VAR>(<VAR>alist<
0470: 2f 56 41 52 3e 5b 5b 2c 20 3c 56 41 52 3e 72 65  /VAR>[[, <VAR>re
0480: 74 75 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 5d  turn_type</VAR>]
0490: 2c 20 3c 56 41 52 3e 72 65 74 75 72 6e 5f 76 61  , <VAR>return_va
04a0: 6c 75 65 3c 2f 56 41 52 3e 5d 29 3b 3c 2f 43 4f  lue</VAR>]);</CO
04b0: 44 45 3e 0a 3c 43 4f 44 45 3e 7d 3c 2f 43 4f 44  DE>.<CODE>}</COD
04c0: 45 3e 0a 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 3c 50  E>.</PRE>.<P>.<P
04d0: 52 45 3e 0a 3c 43 4f 44 45 3e 3c 56 41 52 3e 63  RE>.<CODE><VAR>c
04e0: 61 6c 6c 62 61 63 6b 3c 2f 56 41 52 3e 20 3d 20  allback</VAR> = 
04f0: 61 6c 6c 6f 63 5f 63 61 6c 6c 62 61 63 6b 28 3c  alloc_callback(<
0500: 56 41 52 3e 26 66 75 6e 63 74 69 6f 6e 3c 2f 56  VAR>&function</V
0510: 41 52 3e 2c 20 3c 56 41 52 3e 64 61 74 61 3c 2f  AR>, <VAR>data</
0520: 56 41 52 3e 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f  VAR>);</CODE>.</
0530: 50 52 45 3e 0a 3c 50 3e 0a 3c 50 52 45 3e 0a 3c  PRE>.<P>.<PRE>.<
0540: 43 4f 44 45 3e 66 72 65 65 5f 63 61 6c 6c 62 61  CODE>free_callba
0550: 63 6b 28 3c 56 41 52 3e 63 61 6c 6c 62 61 63 6b  ck(<VAR>callback
0560: 3c 2f 56 41 52 3e 29 3b 3c 2f 43 4f 44 45 3e 0a  </VAR>);</CODE>.
0570: 3c 2f 50 52 45 3e 0a 3c 50 3e 0a 3c 50 52 45 3e  </PRE>.<P>.<PRE>
0580: 0a 3c 43 4f 44 45 3e 69 73 5f 63 61 6c 6c 62 61  .<CODE>is_callba
0590: 63 6b 28 3c 56 41 52 3e 63 61 6c 6c 62 61 63 6b  ck(<VAR>callback
05a0: 3c 2f 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 0a 3c  </VAR>)</CODE>.<
05b0: 43 4f 44 45 3e 63 61 6c 6c 62 61 63 6b 5f 61 64  CODE>callback_ad
05c0: 64 72 65 73 73 28 3c 56 41 52 3e 63 61 6c 6c 62  dress(<VAR>callb
05d0: 61 63 6b 3c 2f 56 41 52 3e 29 3c 2f 43 4f 44 45  ack</VAR>)</CODE
05e0: 3e 0a 3c 43 4f 44 45 3e 63 61 6c 6c 62 61 63 6b  >.<CODE>callback
05f0: 5f 64 61 74 61 28 3c 56 41 52 3e 63 61 6c 6c 62  _data(<VAR>callb
0600: 61 63 6b 3c 2f 56 41 52 3e 29 3c 2f 43 4f 44 45  ack</VAR>)</CODE
0610: 3e 0a 3c 2f 50 52 45 3e 0a 0a 3c 41 20 4e 41 4d  >.</PRE>..<A NAM
0620: 45 3d 22 44 65 73 63 72 69 70 74 69 6f 6e 22 3e  E="Description">
0630: 0a 3c 48 32 3e 44 65 73 63 72 69 70 74 69 6f 6e  .<H2>Description
0640: 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 54 68 65 73  </H2>.</A>..Thes
0650: 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 6d 70 6c  e functions impl
0660: 65 6d 65 6e 74 20 3c 45 4d 3e 63 6c 6f 73 75 72  ement <EM>closur
0670: 65 73 3c 2f 45 4d 3e 20 77 69 74 68 20 76 61 72  es</EM> with var
0680: 69 61 62 6c 65 20 61 72 67 75 6d 65 6e 74 73 0a  iable arguments.
0690: 61 73 20 66 69 72 73 74 2d 63 6c 61 73 73 20 43  as first-class C
06a0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 3c 50 3e 0a   functions..<P>.
06b0: 43 6c 6f 73 75 72 65 73 20 20 61 73 20 20 3c 45  Closures  as  <E
06c0: 4d 3e 66 69 72 73 74 2d 63 6c 61 73 73 20 20 43  M>first-class  C
06d0: 20 66 75 6e 63 74 69 6f 6e 73 3c 2f 45 4d 3e 20   functions</EM> 
06e0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 79 20  means that they 
06f0: 66 69 74 0a 69 6e 74 6f 20 61 20 66 75 6e 63 74  fit.into a funct
0700: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 61 6e 64 20  ion pointer and 
0710: 63 61 6e 20 62 65 20 63 61 6c 6c 65 64 20 65 78  can be called ex
0720: 61 63 74 6c 79 20 6c 69 6b 65 20 61 6e 79 0a 6f  actly like any.o
0730: 74 68 65 72 20 20 43 20 66 75 6e 63 74 69 6f 6e  ther  C function
0740: 2e 20 4d 6f 72 65 6f 76 65 72 2c 20 74 68 65 79  . Moreover, they
0750: 20 63 61 6e 20 62 65 20 63 61 6c 6c 65 64 20 77   can be called w
0760: 69 74 68 20 76 61 72 69 61 62 6c 65 0a 61 72 67  ith variable.arg
0770: 75 6d 65 6e 74 73 20 61 6e 64 20 63 61 6e 20 72  uments and can r
0780: 65 74 75 72 6e 20 76 61 72 69 61 62 6c 65 20 72  eturn variable r
0790: 65 74 75 72 6e 20 76 61 6c 75 65 73 2e 0a 3c 50  eturn values..<P
07a0: 3e 0a 3c 43 4f 44 45 3e 3c 56 41 52 3e 63 61 6c  >.<CODE><VAR>cal
07b0: 6c 62 61 63 6b 3c 2f 56 41 52 3e 20 3d 20 61 6c  lback</VAR> = al
07c0: 6c 6f 63 5f 63 61 6c 6c 62 61 63 6b 28 3c 56 41  loc_callback(<VA
07d0: 52 3e 26 66 75 6e 63 74 69 6f 6e 3c 2f 56 41 52  R>&function</VAR
07e0: 3e 2c 20 3c 56 41 52 3e 64 61 74 61 3c 2f 56 41  >, <VAR>data</VA
07f0: 52 3e 29 3c 2f 43 4f 44 45 3e 0a 61 6c 6c 6f 63  R>)</CODE>.alloc
0800: 61 74 65 73 20 20 61 0a 63 61 6c 6c 62 61 63 6b  ates  a.callback
0810: 2e 20 20 57 68 65 6e 20 20 3c 56 41 52 3e 63 61  .  When  <VAR>ca
0820: 6c 6c 62 61 63 6b 3c 2f 56 41 52 3e 20 67 65 74  llback</VAR> get
0830: 73 20 63 61 6c 6c 65 64 2c 20 69 74 20 61 72 72  s called, it arr
0840: 61 6e 67 65 73 20 74 6f 20 63 61 6c 6c 0a 3c 56  anges to call.<V
0850: 41 52 3e 66 75 6e 63 74 69 6f 6e 3c 2f 56 41 52  AR>function</VAR
0860: 3e 2c 20 70 61 73 73 69 6e 67 20 3c 56 41 52 3e  >, passing <VAR>
0870: 64 61 74 61 3c 2f 56 41 52 3e 20 61 73 20 66 69  data</VAR> as fi
0880: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 20 61 6e  rst argument  an
0890: 64 2c 20 20 61 73 20 20 73 65 63 6f 6e 64 0a 61  d,  as  second.a
08a0: 72 67 75 6d 65 6e 74 2c 20 74 68 65 20 65 6e 74  rgument, the ent
08b0: 69 72 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  ire sequence of 
08c0: 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64  arguments passed
08d0: 20 74 6f 20 3c 56 41 52 3e 63 61 6c 6c 62 61 63   to <VAR>callbac
08e0: 6b 3c 2f 56 41 52 3e 2e 0a 3c 50 3e 0a 46 75 6e  k</VAR>..<P>.Fun
08f0: 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63 6f  ction calling co
0900: 6e 76 65 6e 74 69 6f 6e 73 20 64 69 66 66 65 72  nventions differ
0910: 20 63 6f 6e 73 69 64 65 72 61 62 6c 79 20 20 6f   considerably  o
0920: 6e 20 20 64 69 66 66 65 72 65 6e 74 0a 6d 61 63  n  different.mac
0930: 68 69 6e 65 73 2c 20 74 68 65 72 65 66 6f 72 65  hines, therefore
0940: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
0950: 72 65 20 61 63 63 65 73 73 65 64 20 61 6e 64 0a  re accessed and.
0960: 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c 75 65  the result value
0970: 20 69 73 20 73 74 6f 72 65 64 20 74 68 72 6f 75   is stored throu
0980: 67 68 20 74 68 65 20 73 61 6d 65 20 6d 61 63 72  gh the same macr
0990: 6f 73 20 61 73 20 75 73 65 64 0a 62 79 20 74 68  os as used.by th
09a0: 65 20 3c 45 4d 3e 76 61 63 61 6c 6c 3c 2f 45 4d  e <EM>vacall</EM
09b0: 3e 20 70 61 63 6b 61 67 65 2c 20 73 65 65 20 62  > package, see b
09c0: 65 6c 6f 77 2e 0a 3c 50 3e 0a 54 68 65 20 20 63  elow..<P>.The  c
09d0: 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 66 75 6e  allbacks are fun
09e0: 63 74 69 6f 6e 73 20 77 69 74 68 20 69 6e 64 65  ctions with inde
09f0: 66 69 6e 69 74 65 20 65 78 74 65 6e 74 3a 20 3c  finite extent: <
0a00: 43 4f 44 45 3e 3c 56 41 52 3e 63 61 6c 6c 62 61  CODE><VAR>callba
0a10: 63 6b 3c 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e 0a  ck</VAR></CODE>.
0a20: 69 73 20 6f 6e 6c 79 20 64 65 61 6c 6c 6f 63 61  is only dealloca
0a30: 74 65 64 20 77 68 65 6e 20 20 3c 43 4f 44 45 3e  ted when  <CODE>
0a40: 66 72 65 65 5f 63 61 6c 6c 62 61 63 6b 28 3c 56  free_callback(<V
0a50: 41 52 3e 63 61 6c 6c 62 61 63 6b 3c 2f 56 41 52  AR>callback</VAR
0a60: 3e 29 3c 2f 43 4f 44 45 3e 20 20 69 73 0a 63 61  >)</CODE>  is.ca
0a70: 6c 6c 65 64 2e 0a 3c 50 3e 0a 3c 43 4f 44 45 3e  lled..<P>.<CODE>
0a80: 69 73 5f 63 61 6c 6c 62 61 63 6b 28 3c 56 41 52  is_callback(<VAR
0a90: 3e 63 61 6c 6c 62 61 63 6b 3c 2f 56 41 52 3e 29  >callback</VAR>)
0aa0: 3c 2f 43 4f 44 45 3e 0a 63 68 65 63 6b 73 20 77  </CODE>.checks w
0ab0: 68 65 74 68 65 72 20 74 68 65 20 43 20 66 75 6e  hether the C fun
0ac0: 63 74 69 6f 6e 20 3c 43 4f 44 45 3e 3c 56 41 52  ction <CODE><VAR
0ad0: 3e 63 61 6c 6c 62 61 63 6b 3c 2f 56 41 52 3e 3c  >callback</VAR><
0ae0: 2f 43 4f 44 45 3e 0a 77 61 73 20 70 72 6f 64 75  /CODE>.was produ
0af0: 63 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ced by a call to
0b00: 20 20 3c 43 4f 44 45 3e 61 6c 6c 6f 63 5f 63 61    <CODE>alloc_ca
0b10: 6c 6c 62 61 63 6b 3c 2f 43 4f 44 45 3e 2e 20 20  llback</CODE>.  
0b20: 20 49 66 20 20 74 68 69 73 0a 72 65 74 75 72 6e   If  this.return
0b30: 73 20 74 72 75 65 2c 20 74 68 65 20 61 72 67 75  s true, the argu
0b40: 6d 65 6e 74 73 20 67 69 76 65 6e 20 74 6f 20 3c  ments given to <
0b50: 43 4f 44 45 3e 61 6c 6c 6f 63 5f 63 61 6c 6c 62  CODE>alloc_callb
0b60: 61 63 6b 3c 2f 43 4f 44 45 3e 20 63 61 6e 20 62  ack</CODE> can b
0b70: 65 0a 72 65 74 72 69 65 76 65 64 3a 0a 3c 55 4c  e.retrieved:.<UL
0b80: 3e 0a 3c 4c 49 3e 20 3c 43 4f 44 45 3e 63 61 6c  >.<LI> <CODE>cal
0b90: 6c 62 61 63 6b 5f 61 64 64 72 65 73 73 28 3c 56  lback_address(<V
0ba0: 41 52 3e 63 61 6c 6c 62 61 63 6b 3c 2f 56 41 52  AR>callback</VAR
0bb0: 3e 29 3c 2f 43 4f 44 45 3e 20 72 65 74 75 72 6e  >)</CODE> return
0bc0: 73 20 3c 56 41 52 3e 26 66 75 6e 63 74 69 6f 6e  s <VAR>&function
0bd0: 3c 2f 56 41 52 3e 2c 0a 3c 4c 49 3e 20 3c 43 4f  </VAR>,.<LI> <CO
0be0: 44 45 3e 63 61 6c 6c 62 61 63 6b 5f 64 61 74 61  DE>callback_data
0bf0: 28 3c 56 41 52 3e 63 61 6c 6c 62 61 63 6b 3c 2f  (<VAR>callback</
0c00: 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 20 72 65 74  VAR>)</CODE> ret
0c10: 75 72 6e 73 20 3c 56 41 52 3e 64 61 74 61 3c 2f  urns <VAR>data</
0c20: 56 41 52 3e 2e 0a 3c 2f 55 4c 3e 0a 0a 3c 41 20  VAR>..</UL>..<A 
0c30: 4e 41 4d 45 3d 22 56 41 43 41 4c 4c 20 6d 61 63  NAME="VACALL mac
0c40: 72 6f 73 22 3e 0a 3c 48 32 3e 56 41 43 41 4c 4c  ros">.<H2>VACALL
0c50: 20 6d 61 63 72 6f 73 3c 2f 48 32 3e 0a 3c 2f 41   macros</H2>.</A
0c60: 3e 0a 0a 57 69 74 68 69 6e 20 3c 56 41 52 3e 66  >..Within <VAR>f
0c70: 75 6e 63 74 69 6f 6e 3c 2f 56 41 52 3e 2c 20 74  unction</VAR>, t
0c80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
0c90: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
0ca0: 74 6f 20 77 61 6c 6b 0a 74 68 72 6f 75 67 68 20  to walk.through 
0cb0: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73  the argument lis
0cc0: 74 20 61 6e 64 20 73 70 65 63 69 66 79 20 61 20  t and specify a 
0cd0: 72 65 74 75 72 6e 20 76 61 6c 75 65 3a 0a 3c 50  return value:.<P
0ce0: 3e 0a 3c 50 52 45 3e 0a 3c 43 4f 44 45 3e 76 61  >.<PRE>.<CODE>va
0cf0: 5f 73 74 61 72 74 5f 3c 56 41 52 3e 74 79 70 65  _start_<VAR>type
0d00: 3c 2f 56 41 52 3e 28 3c 56 41 52 3e 61 6c 69 73  </VAR>(<VAR>alis
0d10: 74 3c 2f 56 41 52 3e 5b 2c 20 3c 56 41 52 3e 72  t</VAR>[, <VAR>r
0d20: 65 74 75 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e  eturn_type</VAR>
0d30: 5d 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f 50 52 45  ]);</CODE>.</PRE
0d40: 3e 0a 73 74 61 72 74 73 20 74 68 65 20 77 61 6c  >.starts the wal
0d50: 6b 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 72  k through the ar
0d60: 67 75 6d 65 6e 74 20 6c 69 73 74 20 61 6e 64 20  gument list and 
0d70: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 72 65  specifies the re
0d80: 74 75 72 6e 20 74 79 70 65 2e 0a 3c 50 3e 0a 3c  turn type..<P>.<
0d90: 50 52 45 3e 0a 3c 43 4f 44 45 3e 61 72 67 20 3d  PRE>.<CODE>arg =
0da0: 20 76 61 5f 61 72 67 5f 3c 56 41 52 3e 74 79 70   va_arg_<VAR>typ
0db0: 65 3c 2f 56 41 52 3e 28 3c 56 41 52 3e 61 6c 69  e</VAR>(<VAR>ali
0dc0: 73 74 3c 2f 56 41 52 3e 5b 2c 20 3c 56 41 52 3e  st</VAR>[, <VAR>
0dd0: 61 72 67 5f 74 79 70 65 3c 2f 56 41 52 3e 5d 29  arg_type</VAR>])
0de0: 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f 50 52 45 3e 0a  ;</CODE>.</PRE>.
0df0: 66 65 74 63 68 65 73 20 74 68 65 20 6e 65 78 74  fetches the next
0e00: 20 61 72 67 75 6d 65 6e 74 20 66 72 6f 6d 20 74   argument from t
0e10: 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74  he argument list
0e20: 2e 0a 3c 50 3e 0a 3c 50 52 45 3e 0a 3c 43 4f 44  ..<P>.<PRE>.<COD
0e30: 45 3e 76 61 5f 72 65 74 75 72 6e 5f 3c 56 41 52  E>va_return_<VAR
0e40: 3e 74 79 70 65 3c 2f 56 41 52 3e 28 3c 56 41 52  >type</VAR>(<VAR
0e50: 3e 61 6c 69 73 74 3c 2f 56 41 52 3e 5b 5b 2c 20  >alist</VAR>[[, 
0e60: 3c 56 41 52 3e 72 65 74 75 72 6e 5f 74 79 70 65  <VAR>return_type
0e70: 3c 2f 56 41 52 3e 5d 2c 20 3c 56 41 52 3e 72 65  </VAR>], <VAR>re
0e80: 74 75 72 6e 5f 76 61 6c 75 65 3c 2f 56 41 52 3e  turn_value</VAR>
0e90: 5d 29 3b 3c 2f 43 4f 44 45 3e 0a 3c 2f 50 52 45  ]);</CODE>.</PRE
0ea0: 3e 0a 65 6e 64 73 20 20 74 68 65 20 77 61 6c 6b  >.ends  the walk
0eb0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 61 72 67   through the arg
0ec0: 75 6d 65 6e 74 20 6c 69 73 74 20 61 6e 64 20 73  ument list and s
0ed0: 70 65 63 69 66 69 65 73 20 74 68 65 20 72 65 74  pecifies the ret
0ee0: 75 72 6e 20 76 61 6c 75 65 2e 0a 3c 50 3e 0a 54  urn value..<P>.T
0ef0: 68 65 20 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41  he <VAR>type</VA
0f00: 52 3e 20 69 6e 20 3c 43 4f 44 45 3e 76 61 5f 73  R> in <CODE>va_s
0f10: 74 61 72 74 5f 3c 56 41 52 3e 74 79 70 65 3c 2f  tart_<VAR>type</
0f20: 56 41 52 3e 3c 2f 43 4f 44 45 3e 0a 20 61 6e 64  VAR></CODE>. and
0f30: 20 3c 43 4f 44 45 3e 76 61 5f 72 65 74 75 72 6e   <CODE>va_return
0f40: 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e  _<VAR>type</VAR>
0f50: 3c 2f 43 4f 44 45 3e 20 73 68 61 6c 6c 20 62 65  </CODE> shall be
0f60: 20 20 6f 6e 65 0a 6f 66 20 3c 43 4f 44 45 3e 76    one.of <CODE>v
0f70: 6f 69 64 3c 2f 43 4f 44 45 3e 2c 20 20 3c 43 4f  oid</CODE>,  <CO
0f80: 44 45 3e 69 6e 74 3c 2f 43 4f 44 45 3e 2c 20 20  DE>int</CODE>,  
0f90: 3c 43 4f 44 45 3e 75 69 6e 74 3c 2f 43 4f 44 45  <CODE>uint</CODE
0fa0: 3e 2c 20 3c 43 4f 44 45 3e 6c 6f 6e 67 3c 2f 43  >, <CODE>long</C
0fb0: 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 75 6c 6f 6e  ODE>,.<CODE>ulon
0fc0: 67 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e  g</CODE>, <CODE>
0fd0: 6c 6f 6e 67 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c  longlong</CODE>,
0fe0: 20 3c 43 4f 44 45 3e 75 6c 6f 6e 67 6c 6f 6e 67   <CODE>ulonglong
0ff0: 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 64  </CODE>,.<CODE>d
1000: 6f 75 62 6c 65 3c 2f 43 4f 44 45 3e 2c 20 3c 43  ouble</CODE>, <C
1010: 4f 44 45 3e 73 74 72 75 63 74 3c 2f 43 4f 44 45  ODE>struct</CODE
1020: 3e 2c 20 3c 43 4f 44 45 3e 70 74 72 3c 2f 43 4f  >, <CODE>ptr</CO
1030: 44 45 3e 0a 6f 72 0a 28 66 6f 72 20 41 4e 53 49  DE>.or.(for ANSI
1040: 20 43 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65   C calling conve
1050: 6e 74 69 6f 6e 73 20 6f 6e 6c 79 29 0a 3c 43 4f  ntions only).<CO
1060: 44 45 3e 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 20  DE>char</CODE>, 
1070: 3c 43 4f 44 45 3e 73 63 68 61 72 3c 2f 43 4f 44  <CODE>schar</COD
1080: 45 3e 2c 20 20 3c 43 4f 44 45 3e 75 63 68 61 72  E>,  <CODE>uchar
1090: 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 73  </CODE>,.<CODE>s
10a0: 68 6f 72 74 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c  hort</CODE>,   <
10b0: 43 4f 44 45 3e 75 73 68 6f 72 74 3c 2f 43 4f 44  CODE>ushort</COD
10c0: 45 3e 2c 20 20 20 3c 43 4f 44 45 3e 66 6c 6f 61  E>,   <CODE>floa
10d0: 74 3c 2f 43 4f 44 45 3e 2c 0a 64 65 70 65 6e 64  t</CODE>,.depend
10e0: 69 6e 67 20 20 20 6f 6e 20 20 74 68 65 20 20 63  ing   on  the  c
10f0: 6c 61 73 73 20 20 6f 66 20 3c 56 41 52 3e 72 65  lass  of <VAR>re
1100: 74 75 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 2e  turn_type</VAR>.
1110: 0a 3c 50 3e 0a 54 68 65 20 3c 56 41 52 3e 74 79  .<P>.The <VAR>ty
1120: 70 65 3c 2f 56 41 52 3e 20 73 70 65 63 69 66 69  pe</VAR> specifi
1130: 65 72 73 20 69 6e 0a 3c 43 4f 44 45 3e 76 61 5f  ers in.<CODE>va_
1140: 73 74 61 72 74 5f 3c 56 41 52 3e 74 79 70 65 3c  start_<VAR>type<
1150: 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e 20 61 6e 64  /VAR></CODE> and
1160: 20 3c 43 4f 44 45 3e 76 61 5f 72 65 74 75 72 6e   <CODE>va_return
1170: 5f 3c 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e  _<VAR>type</VAR>
1180: 3c 2f 43 4f 44 45 3e 0a 20 6d 75 73 74 20 62 65  </CODE>. must be
1190: 20 74 68 65 20 73 61 6d 65 2e 0a 54 68 65 20 3c   the same..The <
11a0: 56 41 52 3e 72 65 74 75 72 6e 5f 74 79 70 65 3c  VAR>return_type<
11b0: 2f 56 41 52 3e 20 73 70 65 63 69 66 69 65 72 73  /VAR> specifiers
11c0: 20 20 20 70 61 73 73 65 64 20 20 20 20 74 6f 0a     passed    to.
11d0: 3c 43 4f 44 45 3e 76 61 5f 73 74 61 72 74 5f 3c  <CODE>va_start_<
11e0: 56 41 52 3e 74 79 70 65 3c 2f 56 41 52 3e 3c 2f  VAR>type</VAR></
11f0: 43 4f 44 45 3e 20 61 6e 64 20 3c 43 4f 44 45 3e  CODE> and <CODE>
1200: 76 61 5f 72 65 74 75 72 6e 5f 3c 56 41 52 3e 74  va_return_<VAR>t
1210: 79 70 65 3c 2f 56 41 52 3e 3c 2f 43 4f 44 45 3e  ype</VAR></CODE>
1220: 0a 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  . must be the sa
1230: 6d 65 2e 0a 3c 50 3e 0a 54 68 65 20 3c 56 41 52  me..<P>.The <VAR
1240: 3e 74 79 70 65 3c 2f 56 41 52 3e 20 69 6e 20 3c  >type</VAR> in <
1250: 43 4f 44 45 3e 76 61 5f 61 72 67 5f 3c 56 41 52  CODE>va_arg_<VAR
1260: 3e 74 79 70 65 3c 2f 56 41 52 3e 3c 2f 43 4f 44  >type</VAR></COD
1270: 45 3e 0a 73 68 61 6c 6c 20 62 65 20 6f 6e 65 20  E>.shall be one 
1280: 6f 66 20 3c 43 4f 44 45 3e 69 6e 74 3c 2f 43 4f  of <CODE>int</CO
1290: 44 45 3e 2c 20 20 3c 43 4f 44 45 3e 75 69 6e 74  DE>,  <CODE>uint
12a0: 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 6c  </CODE>, <CODE>l
12b0: 6f 6e 67 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f 44  ong</CODE>,.<COD
12c0: 45 3e 75 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c 20  E>ulong</CODE>, 
12d0: 3c 43 4f 44 45 3e 6c 6f 6e 67 6c 6f 6e 67 3c 2f  <CODE>longlong</
12e0: 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 75 6c 6f  CODE>, <CODE>ulo
12f0: 6e 67 6c 6f 6e 67 3c 2f 43 4f 44 45 3e 2c 0a 3c  nglong</CODE>,.<
1300: 43 4f 44 45 3e 64 6f 75 62 6c 65 3c 2f 43 4f 44  CODE>double</COD
1310: 45 3e 2c 20 3c 43 4f 44 45 3e 73 74 72 75 63 74  E>, <CODE>struct
1320: 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 70  </CODE>, <CODE>p
1330: 74 72 3c 2f 43 4f 44 45 3e 0a 6f 72 20 28 66 6f  tr</CODE>.or (fo
1340: 72 20 41 4e 53 49 20 43 20 63 61 6c 6c 69 6e 67  r ANSI C calling
1350: 20 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 20 20 6f    conventions  o
1360: 6e 6c 79 29 0a 3c 43 4f 44 45 3e 63 68 61 72 3c  nly).<CODE>char<
1370: 2f 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 73 63  /CODE>, <CODE>sc
1380: 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 20 3c 43 4f  har</CODE>,  <CO
1390: 44 45 3e 75 63 68 61 72 3c 2f 43 4f 44 45 3e 2c  DE>uchar</CODE>,
13a0: 0a 3c 43 4f 44 45 3e 73 68 6f 72 74 3c 2f 43 4f  .<CODE>short</CO
13b0: 44 45 3e 2c 20 20 20 3c 43 4f 44 45 3e 75 73 68  DE>,   <CODE>ush
13c0: 6f 72 74 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c 43  ort</CODE>,   <C
13d0: 4f 44 45 3e 66 6c 6f 61 74 3c 2f 43 4f 44 45 3e  ODE>float</CODE>
13e0: 2c 0a 64 65 70 65 6e 64 69 6e 67 20 20 20 6f 6e  ,.depending   on
13f0: 20 20 74 68 65 20 20 63 6c 61 73 73 20 20 6f 66    the  class  of
1400: 20 3c 56 41 52 3e 61 72 67 5f 74 79 70 65 3c 2f   <VAR>arg_type</
1410: 56 41 52 3e 2e 0a 3c 50 3e 0a 49 6e 20 3c 43 4f  VAR>..<P>.In <CO
1420: 44 45 3e 76 61 5f 73 74 61 72 74 5f 73 74 72 75  DE>va_start_stru
1430: 63 74 28 3c 56 41 52 3e 61 6c 69 73 74 3c 2f 56  ct(<VAR>alist</V
1440: 41 52 3e 2c 20 3c 56 41 52 3e 72 65 74 75 72 6e  AR>, <VAR>return
1450: 5f 74 79 70 65 3c 2f 56 41 52 3e 2c 20 3c 56 41  _type</VAR>, <VA
1460: 52 3e 73 70 6c 69 74 74 61 62 6c 65 3c 2f 56 41  R>splittable</VA
1470: 52 3e 29 3b 3c 2f 43 4f 44 45 3e 20 74 68 65 0a  R>);</CODE> the.
1480: 3c 56 41 52 3e 73 70 6c 69 74 74 61 62 6c 65 3c  <VAR>splittable<
1490: 2f 56 41 52 3e 20 66 6c 61 67 20 73 70 65 63 69  /VAR> flag speci
14a0: 66 69 65 73 20 77 68 65 74 68 65 72 20 74 68 65  fies whether the
14b0: 20 73 74 72 75 63 74 20 3c 56 41 52 3e 72 65 74   struct <VAR>ret
14c0: 75 72 6e 5f 74 79 70 65 3c 2f 56 41 52 3e 20 63  urn_type</VAR> c
14d0: 61 6e 0a 62 65 20 72 65 74 75 72 6e 65 64 20 69  an.be returned i
14e0: 6e 20 72 65 67 69 73 74 65 72 73 20 73 75 63 68  n registers such
14f0: 20 74 68 61 74 20 65 76 65 72 79 20 73 74 72 75   that every stru
1500: 63 74 20 66 69 65 6c 64 20 66 69 74 73 0a 65 6e  ct field fits.en
1510: 74 69 72 65 6c 79 20 20 69 6e 20 61 20 73 69 6e  tirely  in a sin
1520: 67 6c 65 20 72 65 67 69 73 74 65 72 2e 20 54 68  gle register. Th
1530: 69 73 20 6e 65 65 64 73 20 74 6f 20 62 65 20 73  is needs to be s
1540: 70 65 63 69 66 69 65 64 0a 66 6f 72 20 73 74 72  pecified.for str
1550: 75 63 74 73 20 6f 66 20 73 69 7a 65 20 3c 53 41  ucts of size <SA
1560: 4d 50 3e 32 2a 73 69 7a 65 6f 66 28 6c 6f 6e 67  MP>2*sizeof(long
1570: 29 3c 2f 53 41 4d 50 3e 2e 20 46 6f 72 20 73 74  )</SAMP>. For st
1580: 72 75 63 74 73 20 6f 66 20 73 69 7a 65 0a 26 6c  ructs of size.&l
1590: 74 3b 3d 20 3c 53 41 4d 50 3e 73 69 7a 65 6f 66  t;= <SAMP>sizeof
15a0: 28 6c 6f 6e 67 29 3c 2f 53 41 4d 50 3e 2c 20 20  (long)</SAMP>,  
15b0: 73 70 6c 69 74 74 61 62 6c 65 20 20 69 73 20 69  splittable  is i
15c0: 67 6e 6f 72 65 64 20 61 6e 64 20 61 73 73 75 6d  gnored and assum
15d0: 65 64 20 74 6f 20 62 65 20 31 2e 0a 46 6f 72 20  ed to be 1..For 
15e0: 20 73 74 72 75 63 74 73 20 20 6f 66 20 20 73 69   structs  of  si
15f0: 7a 65 20 20 26 67 74 3b 20 3c 53 41 4d 50 3e 32  ze  &gt; <SAMP>2
1600: 2a 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 3c 2f 53  *sizeof(long)</S
1610: 41 4d 50 3e 2c 20 20 73 70 6c 69 74 74 61 62 6c  AMP>,  splittabl
1620: 65 20 20 69 73 0a 69 67 6e 6f 72 65 64 20 20 61  e  is.ignored  a
1630: 6e 64 20 20 61 73 73 75 6d 65 64 20 74 6f 20 62  nd  assumed to b
1640: 65 20 30 2e 20 54 68 65 72 65 20 61 72 65 20 73  e 0. There are s
1650: 6f 6d 65 20 68 61 6e 64 79 20 6d 61 63 72 6f 73  ome handy macros
1660: 0a 66 6f 72 20 74 68 69 73 3a 0a 3c 50 52 45 3e  .for this:.<PRE>
1670: 0a 3c 43 4f 44 45 3e 76 61 5f 77 6f 72 64 5f 73  .<CODE>va_word_s
1680: 70 6c 69 74 74 61 62 6c 65 5f 31 20 28 3c 56 41  plittable_1 (<VA
1690: 52 3e 74 79 70 65 31 3c 2f 56 41 52 3e 29 3c 2f  R>type1</VAR>)</
16a0: 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 76 61 5f 77  CODE>.<CODE>va_w
16b0: 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c 65 5f 32  ord_splittable_2
16c0: 20 28 3c 56 41 52 3e 74 79 70 65 31 3c 2f 56 41   (<VAR>type1</VA
16d0: 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 32 3c 2f  R>, <VAR>type2</
16e0: 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 0a 3c 43 4f  VAR>)</CODE>.<CO
16f0: 44 45 3e 76 61 5f 77 6f 72 64 5f 73 70 6c 69 74  DE>va_word_split
1700: 74 61 62 6c 65 5f 33 20 28 3c 56 41 52 3e 74 79  table_3 (<VAR>ty
1710: 70 65 31 3c 2f 56 41 52 3e 2c 20 3c 56 41 52 3e  pe1</VAR>, <VAR>
1720: 74 79 70 65 32 3c 2f 56 41 52 3e 2c 20 3c 56 41  type2</VAR>, <VA
1730: 52 3e 74 79 70 65 33 3c 2f 56 41 52 3e 29 3c 2f  R>type3</VAR>)</
1740: 43 4f 44 45 3e 0a 3c 43 4f 44 45 3e 76 61 5f 77  CODE>.<CODE>va_w
1750: 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c 65 5f 34  ord_splittable_4
1760: 20 28 3c 56 41 52 3e 74 79 70 65 31 3c 2f 56 41   (<VAR>type1</VA
1770: 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 32 3c 2f  R>, <VAR>type2</
1780: 56 41 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 33  VAR>, <VAR>type3
1790: 3c 2f 56 41 52 3e 2c 20 3c 56 41 52 3e 74 79 70  </VAR>, <VAR>typ
17a0: 65 34 3c 2f 56 41 52 3e 29 3c 2f 43 4f 44 45 3e  e4</VAR>)</CODE>
17b0: 0a 3c 2f 50 52 45 3e 0a 46 6f 72 20 61 20 73 74  .</PRE>.For a st
17c0: 72 75 63 74 20 77 69 74 68 20 74 68 72 65 65 20  ruct with three 
17d0: 73 6c 6f 74 73 0a 3c 50 52 45 3e 0a 3c 43 4f 44  slots.<PRE>.<COD
17e0: 45 3e 73 74 72 75 63 74 20 7b 20 3c 56 41 52 3e  E>struct { <VAR>
17f0: 74 79 70 65 31 20 69 64 31 3c 2f 56 41 52 3e 3b  type1 id1</VAR>;
1800: 20 3c 56 41 52 3e 74 79 70 65 32 20 69 64 32 3c   <VAR>type2 id2<
1810: 2f 56 41 52 3e 3b 20 3c 56 41 52 3e 74 79 70 65  /VAR>; <VAR>type
1820: 33 20 69 64 33 3c 2f 56 41 52 3e 3b 20 7d 3c 2f  3 id3</VAR>; }</
1830: 43 4f 44 45 3e 0a 3c 2f 50 52 45 3e 0a 79 6f 75  CODE>.</PRE>.you
1840: 20 63 61 6e 20 73 70 65 63 69 66 79 20 3c 56 41   can specify <VA
1850: 52 3e 73 70 6c 69 74 74 61 62 6c 65 3c 2f 56 41  R>splittable</VA
1860: 52 3e 20 61 73 0a 3c 43 4f 44 45 3e 76 61 5f 77  R> as.<CODE>va_w
1870: 6f 72 64 5f 73 70 6c 69 74 74 61 62 6c 65 5f 33  ord_splittable_3
1880: 20 28 3c 56 41 52 3e 74 79 70 65 31 3c 2f 56 41   (<VAR>type1</VA
1890: 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 32 3c 2f  R>, <VAR>type2</
18a0: 56 41 52 3e 2c 20 3c 56 41 52 3e 74 79 70 65 33  VAR>, <VAR>type3
18b0: 3c 2f 56 41 52 3e 29 3c 2f 43 4f 44 45 3e 2e 0a  </VAR>)</CODE>..
18c0: 0a 3c 41 20 4e 41 4d 45 3d 22 4e 6f 74 65 73 22  .<A NAME="Notes"
18d0: 3e 0a 3c 48 32 3e 4e 6f 74 65 73 3c 2f 48 32 3e  >.<H2>Notes</H2>
18e0: 0a 3c 2f 41 3e 0a 0a 3c 4f 4c 3e 0a 3c 4c 49 3e  .</A>..<OL>.<LI>
18f0: 20 46 75 6e 63 74 69 6f 6e 73 20 77 68 69 63 68   Functions which
1900: 20 77 61 6e 74 20 74 6f 20 65 6d 75 6c 61 74 65   want to emulate
1910: 20 4b 65 72 6e 69 67 68 61 6e 20 26 61 6d 70 3b   Kernighan &amp;
1920: 20 52 69 74 63 68 69 65 20 20 73 74 79 6c 65 0a   Ritchie  style.
1930: 66 75 6e 63 74 69 6f 6e 73 20 20 28 69 2e 65 2e  functions  (i.e.
1940: 2c 20 20 69 6e 20 20 41 4e 53 49 20 20 43 2c 20  ,  in  ANSI  C, 
1950: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 6f   functions witho
1960: 75 74 20 61 20 74 79 70 65 64 0a 61 72 67 75 6d  ut a typed.argum
1970: 65 6e 74 20 6c 69 73 74 29 20 63 61 6e 6e 6f 74  ent list) cannot
1980: 20 75 73 65 20 74 68 65 20 3c 56 41 52 3e 74 79   use the <VAR>ty
1990: 70 65 3c 2f 56 41 52 3e 20 20 76 61 6c 75 65 73  pe</VAR>  values
19a0: 0a 3c 43 4f 44 45 3e 63 68 61 72 3c 2f 43 4f 44  .<CODE>char</COD
19b0: 45 3e 2c 20 3c 43 4f 44 45 3e 73 63 68 61 72 3c  E>, <CODE>schar<
19c0: 2f 43 4f 44 45 3e 2c 20 20 3c 43 4f 44 45 3e 75  /CODE>,  <CODE>u
19d0: 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f  char</CODE>,.<CO
19e0: 44 45 3e 73 68 6f 72 74 3c 2f 43 4f 44 45 3e 2c  DE>short</CODE>,
19f0: 20 20 20 3c 43 4f 44 45 3e 75 73 68 6f 72 74 3c     <CODE>ushort<
1a00: 2f 43 4f 44 45 3e 2c 20 20 20 3c 43 4f 44 45 3e  /CODE>,   <CODE>
1a10: 66 6c 6f 61 74 3c 2f 43 4f 44 45 3e 2e 0a 41 73  float</CODE>..As
1a20: 20 70 72 65 73 63 72 69 62 65 64 20 62 79 20 74   prescribed by t
1a30: 68 65 20 64 65 66 61 75 6c 74 0a 4b 26 61 6d 70  he default.K&amp
1a40: 3b 52 20 43 20 65 78 70 72 65 73 73 69 6f 6e 20  ;R C expression 
1a50: 70 72 6f 6d 6f 74 69 6f 6e 73 2c 20 74 68 65 79  promotions, they
1a60: 20 68 61 76 65 20 74 6f 20 75 73 65 20 3c 43 4f   have to use <CO
1a70: 44 45 3e 69 6e 74 3c 2f 43 4f 44 45 3e 20 20 69  DE>int</CODE>  i
1a80: 6e 73 74 65 61 64 0a 6f 66 20 3c 43 4f 44 45 3e  nstead.of <CODE>
1a90: 63 68 61 72 3c 2f 43 4f 44 45 3e 2c 20 3c 43 4f  char</CODE>, <CO
1aa0: 44 45 3e 73 63 68 61 72 3c 2f 43 4f 44 45 3e 2c  DE>schar</CODE>,
1ab0: 20 20 3c 43 4f 44 45 3e 75 63 68 61 72 3c 2f 43    <CODE>uchar</C
1ac0: 4f 44 45 3e 2c 0a 3c 43 4f 44 45 3e 73 68 6f 72  ODE>,.<CODE>shor
1ad0: 74 3c 2f 43 4f 44 45 3e 2c 20 20 20 3c 43 4f 44  t</CODE>,   <COD
1ae0: 45 3e 75 73 68 6f 72 74 3c 2f 43 4f 44 45 3e 20  E>ushort</CODE> 
1af0: 61 6e 64 20 3c 43 4f 44 45 3e 64 6f 75 62 6c 65  and <CODE>double
1b00: 3c 2f 43 4f 44 45 3e 20 69 6e 73 74 65 61 64 20  </CODE> instead 
1b10: 6f 66 0a 3c 43 4f 44 45 3e 66 6c 6f 61 74 3c 2f  of.<CODE>float</
1b20: 43 4f 44 45 3e 2e 0a 3c 50 3e 0a 3c 4c 49 3e 20  CODE>..<P>.<LI> 
1b30: 54 68 65 20 6d 61 63 72 6f 73 20 3c 43 4f 44 45  The macros <CODE
1b40: 3e 76 61 5f 73 74 61 72 74 5f 6c 6f 6e 67 6c 6f  >va_start_longlo
1b50: 6e 67 28 29 3c 2f 43 4f 44 45 3e 2c 0a 3c 43 4f  ng()</CODE>,.<CO
1b60: 44 45 3e 76 61 5f 73 74 61 72 74 5f 75 6c 6f 6e  DE>va_start_ulon
1b70: 67 6c 6f 6e 67 28 29 3c 2f 43 4f 44 45 3e 2c 20  glong()</CODE>, 
1b80: 3c 43 4f 44 45 3e 76 61 5f 72 65 74 75 72 6e 5f  <CODE>va_return_
1b90: 6c 6f 6e 67 6c 6f 6e 67 28 29 3c 2f 43 4f 44 45  longlong()</CODE
1ba0: 3e 2c 0a 3c 43 4f 44 45 3e 76 61 5f 72 65 74 75  >,.<CODE>va_retu
1bb0: 72 6e 5f 75 6c 6f 6e 67 6c 6f 6e 67 28 29 3c 2f  rn_ulonglong()</
1bc0: 43 4f 44 45 3e 2c 20 3c 43 4f 44 45 3e 76 61 5f  CODE>, <CODE>va_
1bd0: 61 72 67 5f 6c 6f 6e 67 6c 6f 6e 67 28 29 3c 2f  arg_longlong()</
1be0: 43 4f 44 45 3e 20 61 6e 64 0a 3c 43 4f 44 45 3e  CODE> and.<CODE>
1bf0: 76 61 5f 61 72 67 5f 75 6c 6f 6e 67 6c 6f 6e 67  va_arg_ulonglong
1c00: 28 29 3c 2f 43 4f 44 45 3e 20 77 6f 72 6b 20 6f  ()</CODE> work o
1c10: 6e 6c 79 20 69 66 20 74 68 65 20 43 20 63 6f 6d  nly if the C com
1c20: 70 69 6c 65 72 20 68 61 73 20 61 20 77 6f 72 6b  piler has a work
1c30: 69 6e 67 0a 3c 43 4f 44 45 3e 6c 6f 6e 67 20 6c  ing.<CODE>long l
1c40: 6f 6e 67 3c 2f 43 4f 44 45 3e 20 36 34 2d 62 69  ong</CODE> 64-bi
1c50: 74 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 0a  t integer type..
1c60: 3c 50 3e 0a 3c 4c 49 3e 20 54 68 65 20 73 74 72  <P>.<LI> The str
1c70: 75 63 74 20 74 79 70 65 73 20 75 73 65 64 20 69  uct types used i
1c80: 6e 20 3c 43 4f 44 45 3e 76 61 5f 73 74 61 72 74  n <CODE>va_start
1c90: 5f 73 74 72 75 63 74 28 29 3c 2f 43 4f 44 45 3e  _struct()</CODE>
1ca0: 20 61 6e 64 0a 3c 43 4f 44 45 3e 76 61 5f 73 74   and.<CODE>va_st
1cb0: 72 75 63 74 28 29 3c 2f 43 4f 44 45 3e 20 6d 75  ruct()</CODE> mu
1cc0: 73 74 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 20  st only contain 
1cd0: 28 73 69 67 6e 65 64 20 6f 72 20 75 6e 73 69 67  (signed or unsig
1ce0: 6e 65 64 29 20 69 6e 74 2c 0a 6c 6f 6e 67 2c 20  ned) int,.long, 
1cf0: 6c 6f 6e 67 20 6c 6f 6e 67 20 6f 72 20 70 6f 69  long long or poi
1d00: 6e 74 65 72 20 66 69 65 6c 64 73 2e 20 53 74 72  nter fields. Str
1d10: 75 63 74 20 74 79 70 65 73 20 63 6f 6e 74 61 69  uct types contai
1d20: 6e 69 6e 67 0a 28 73 69 67 6e 65 64 20 6f 72 20  ning.(signed or 
1d30: 75 6e 73 69 67 6e 65 64 29 20 63 68 61 72 2c 20  unsigned) char, 
1d40: 73 68 6f 72 74 2c 20 66 6c 6f 61 74 2c 20 64 6f  short, float, do
1d50: 75 62 6c 65 20 6f 72 20 6f 74 68 65 72 0a 73 74  uble or other.st
1d60: 72 75 63 74 73 20 61 72 65 20 6e 6f 74 20 73 75  ructs are not su
1d70: 70 70 6f 72 74 65 64 2e 0a 3c 50 3e 0a 3c 2f 4f  pported..<P>.</O
1d80: 4c 3e 0a 0a 3c 41 20 4e 41 4d 45 3d 22 53 65 65  L>..<A NAME="See
1d90: 20 61 6c 73 6f 22 3e 0a 3c 48 32 3e 53 65 65 20   also">.<H2>See 
1da0: 61 6c 73 6f 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a  also</H2>.</A>..
1db0: 3c 41 20 48 52 45 46 3d 22 76 61 63 61 6c 6c 28  <A HREF="vacall(
1dc0: 33 29 22 3e 3c 43 4f 44 45 3e 3c 42 3e 76 61 63  3)"><CODE><B>vac
1dd0: 61 6c 6c 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 3c 2f  all</B></CODE></
1de0: 41 3e 28 33 29 2c 20 3c 41 20 48 52 45 46 3d 22  A>(3), <A HREF="
1df0: 74 72 61 6d 70 6f 6c 69 6e 65 28 33 29 22 3e 3c  trampoline(3)"><
1e00: 43 4f 44 45 3e 3c 42 3e 74 72 61 6d 70 6f 6c 69  CODE><B>trampoli
1e10: 6e 65 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 3c 2f 41  ne</B></CODE></A
1e20: 3e 28 33 29 2e 0a 0a 3c 41 20 4e 41 4d 45 3d 22  >(3)...<A NAME="
1e30: 42 75 67 73 22 3e 0a 3c 48 32 3e 42 75 67 73 3c  Bugs">.<H2>Bugs<
1e40: 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 54 68 65 20 20  /H2>.</A>..The  
1e50: 63 75 72 72 65 6e 74 20 20 69 6d 70 6c 65 6d 65  current  impleme
1e60: 6e 74 61 74 69 6f 6e 73 20 68 61 76 65 20 62 65  ntations have be
1e70: 65 6e 20 74 65 73 74 65 64 20 6f 6e 20 61 20 73  en tested on a s
1e80: 65 6c 65 63 74 69 6f 6e 0a 6f 66 20 63 6f 6d 6d  election.of comm
1e90: 6f 6e 20 63 61 73 65 73 20 62 75 74 20 74 68 65  on cases but the
1ea0: 72 65 20 20 61 72 65 20 20 70 72 6f 62 61 62 6c  re  are  probabl
1eb0: 79 20 20 73 74 69 6c 6c 20 20 6d 61 6e 79 0a 62  y  still  many.b
1ec0: 75 67 73 2e 0a 3c 50 3e 0a 54 68 65 72 65 20 20  ugs..<P>.There  
1ed0: 61 72 65 20 20 74 79 70 69 63 61 6c 6c 79 20 20  are  typically  
1ee0: 62 75 69 6c 74 2d 69 6e 20 20 6c 69 6d 69 74 73  built-in  limits
1ef0: 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20   on the size of 
1f00: 74 68 65 0a 61 72 67 75 6d 65 6e 74 2d 6c 69 73  the.argument-lis
1f10: 74 2c 20 77 68 69 63 68 20 6d 61 79 20 61 6c 73  t, which may als
1f20: 6f 20 20 69 6e 63 6c 75 64 65 20 20 74 68 65 20  o  include  the 
1f30: 20 73 69 7a 65 20 20 6f 66 20 20 61 6e 79 0a 73   size  of  any.s
1f40: 74 72 75 63 74 75 72 65 20 61 72 67 75 6d 65 6e  tructure argumen
1f50: 74 73 2e 0a 3c 50 3e 0a 54 68 65 20 64 65 63 69  ts..<P>.The deci
1f60: 73 69 6f 6e 20 77 68 65 74 68 65 72 20 61 20 73  sion whether a s
1f70: 74 72 75 63 74 20 69 73 20 74 6f 20 62 65 20 72  truct is to be r
1f80: 65 74 75 72 6e 65 64 20 69 6e 20 72 65 67 69 73  eturned in regis
1f90: 74 65 72 73 20 6f 72 20 69 6e 20 6d 65 6d 6f 72  ters or in memor
1fa0: 79 0a 63 6f 6e 73 69 64 65 72 73 20 6f 6e 6c 79  y.considers only
1fb0: 20 74 68 65 20 73 74 72 75 63 74 27 73 20 73 69   the struct's si
1fc0: 7a 65 20 61 6e 64 20 61 6c 69 67 6e 6d 65 6e 74  ze and alignment
1fd0: 2e 20 54 68 69 73 20 69 73 20 69 6e 61 63 63 75  . This is inaccu
1fe0: 72 61 74 65 3a 20 66 6f 72 0a 65 78 61 6d 70 6c  rate: for.exampl
1ff0: 65 2c 20 67 63 63 20 6f 6e 20 6d 36 38 6b 2d 6e  e, gcc on m68k-n
2000: 65 78 74 20 72 65 74 75 72 6e 73 0a 3c 43 4f 44  ext returns.<COD
2010: 45 3e 73 74 72 75 63 74 20 7b 20 63 68 61 72 20  E>struct { char 
2020: 61 2c 62 2c 63 3b 20 7d 3c 2f 43 4f 44 45 3e 0a  a,b,c; }</CODE>.
2030: 69 6e 20 72 65 67 69 73 74 65 72 73 20 61 6e 64  in registers and
2040: 0a 3c 43 4f 44 45 3e 73 74 72 75 63 74 20 7b 20  .<CODE>struct { 
2050: 63 68 61 72 20 61 5b 33 5d 3b 20 7d 3c 2f 43 4f  char a[3]; }</CO
2060: 44 45 3e 0a 69 6e 20 6d 65 6d 6f 72 79 2c 20 61  DE>.in memory, a
2070: 6c 74 68 6f 75 67 68 20 62 6f 74 68 20 74 79 70  lthough both typ
2080: 65 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  es have the same
2090: 20 73 69 7a 65 20 61 6e 64 20 74 68 65 20 73 61   size and the sa
20a0: 6d 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 3c 50  me alignment..<P
20b0: 3e 0a 3c 43 4f 44 45 3e 26 6c 74 3b 63 61 6c 6c  >.<CODE>&lt;call
20c0: 62 61 63 6b 2e 68 26 67 74 3b 3c 2f 43 4f 44 45  back.h&gt;</CODE
20d0: 3e 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 63 6c  > cannot be incl
20e0: 75 64 65 64 20 20 77 68 65 6e 20 3c 43 4f 44 45  uded  when <CODE
20f0: 3e 26 6c 74 3b 76 61 72 61 72 67 73 2e 68 26 67  >&lt;varargs.h&g
2100: 74 3b 3c 2f 43 4f 44 45 3e 20 20 6f 72 0a 3c 43  t;</CODE>  or.<C
2110: 4f 44 45 3e 26 6c 74 3b 73 74 64 61 72 67 2e 68  ODE>&lt;stdarg.h
2120: 26 67 74 3b 3c 2f 43 4f 44 45 3e 20 69 73 20 69  &gt;</CODE> is i
2130: 6e 63 6c 75 64 65 64 2e 20 20 28 4e 61 6d 65 20  ncluded.  (Name 
2140: 63 6c 61 73 68 20 66 6f 72 20 3c 43 4f 44 45 3e  clash for <CODE>
2150: 76 61 5f 61 6c 69 73 74 3c 2f 43 4f 44 45 3e 2e  va_alist</CODE>.
2160: 29 0a 3c 50 3e 0a 54 68 65 20 61 72 67 75 6d 65  ).<P>.The argume
2170: 6e 74 20 6c 69 73 74 20 63 61 6e 20 6f 6e 6c 79  nt list can only
2180: 20 62 65 20 77 61 6c 6b 65 64 20 6f 6e 63 65 2e   be walked once.
2190: 0a 0a 3c 41 20 4e 41 4d 45 3d 22 4e 6f 6e 2d 42  ..<A NAME="Non-B
21a0: 75 67 73 22 3e 0a 3c 48 32 3e 4e 6f 6e 2d 42 75  ugs">.<H2>Non-Bu
21b0: 67 73 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 41 6c  gs</H2>.</A>..Al
21c0: 6c 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  l  information i
21d0: 73 20 70 61 73 73 65 64 20 69 6e 20 43 50 55 20  s passed in CPU 
21e0: 72 65 67 69 73 74 65 72 73 20 61 6e 64 20 74 68  registers and th
21f0: 65 20 73 74 61 63 6b 2e 0a 54 68 65 20 3c 43 4f  e stack..The <CO
2200: 44 45 3e 3c 42 3e 63 61 6c 6c 62 61 63 6b 3c 2f  DE><B>callback</
2210: 42 3e 3c 2f 43 4f 44 45 3e 20 70 61 63 6b 61 67  B></CODE> packag
2220: 65 20 69 73 20 74 68 65 72 65 66 6f 72 65 20 6d  e is therefore m
2230: 75 6c 74 69 74 68 72 65 61 64 2d 73 61 66 65 2e  ultithread-safe.
2240: 0a 0a 3c 41 20 4e 41 4d 45 3d 22 50 6f 72 74 69  ..<A NAME="Porti
2250: 6e 67 22 3e 0a 3c 48 32 3e 50 6f 72 74 69 6e 67  ng">.<H2>Porting
2260: 3c 2f 48 32 3e 0a 3c 2f 41 3e 0a 0a 50 6f 72 74  </H2>.</A>..Port
2270: 69 6e 67 20 3c 43 4f 44 45 3e 3c 42 3e 63 61 6c  ing <CODE><B>cal
2280: 6c 62 61 63 6b 3c 2f 42 3e 3c 2f 43 4f 44 45 3e  lback</B></CODE>
2290: 20 63 6f 6e 73 69 73 74 73 20 69 6e 20 66 69 72   consists in fir
22a0: 73 74 20 70 6f 72 74 69 6e 67 20 74 68 65 20 3c  st porting the <
22b0: 43 4f 44 45 3e 3c 42 3e 76 61 63 61 6c 6c 3c 2f  CODE><B>vacall</
22c0: 42 3e 3c 2f 43 4f 44 45 3e 20 20 61 6e 64 0a 3c  B></CODE>  and.<
22d0: 43 4f 44 45 3e 3c 42 3e 74 72 61 6d 70 6f 6c 69  CODE><B>trampoli
22e0: 6e 65 3c 2f 42 3e 3c 2f 43 4f 44 45 3e 20 20 70  ne</B></CODE>  p
22f0: 61 63 6b 61 67 65 73 2c 20 20 74 68 65 6e 20 20  ackages,  then  
2300: 63 68 6f 6f 73 69 6e 67 20 20 61 20 20 43 50 55  choosing  a  CPU
2310: 20 72 65 67 69 73 74 65 72 20 66 6f 72 0a 70 61   register for.pa
2320: 73 73 69 6e 67 20 74 68 65 20 63 6c 6f 73 75 72  ssing the closur
2330: 65 20 66 72 6f 6d 20 3c 45 4d 3e 74 72 61 6d 70  e from <EM>tramp
2340: 6f 6c 69 6e 65 3c 2f 45 4d 3e 20 74 6f 20 3c 45  oline</EM> to <E
2350: 4d 3e 76 61 63 61 6c 6c 3c 2f 45 4d 3e 2e 20 20  M>vacall</EM>.  
2360: 54 68 69 73 0a 72 65 67 69 73 74 65 72 20 20 20  This.register   
2370: 20 69 73 20 20 20 20 6e 6f 72 6d 61 6c 6c 79 20   is    normally 
2380: 20 20 74 68 65 20 20 20 72 65 67 69 73 74 65 72    the   register
2390: 20 20 20 64 65 73 69 67 6e 61 74 65 64 20 20 20     designated   
23a0: 62 79 0a 3c 43 4f 44 45 3e 53 54 41 54 49 43 5f  by.<CODE>STATIC_
23b0: 43 48 41 49 4e 5f 52 45 47 4e 55 4d 3c 2f 43 4f  CHAIN_REGNUM</CO
23c0: 44 45 3e 20 69 6e 20 74 68 65 20 67 63 63 20 73  DE> in the gcc s
23d0: 6f 75 72 63 65 2c 20 66 69 6c 65 0a 3c 53 41 4d  ource, file.<SAM
23e0: 50 3e 67 63 63 2d 32 2e 37 2e 32 2f 63 6f 6e 66  P>gcc-2.7.2/conf
23f0: 69 67 2f 3c 56 41 52 3e 63 70 75 3c 2f 56 41 52  ig/<VAR>cpu</VAR
2400: 3e 2f 3c 56 41 52 3e 63 70 75 3c 2f 56 41 52 3e  >/<VAR>cpu</VAR>
2410: 2e 68 3c 2f 53 41 4d 50 3e 2e 0a 0a 3c 41 20 4e  .h</SAMP>...<A N
2420: 41 4d 45 3d 22 41 75 74 68 6f 72 22 3e 0a 3c 48  AME="Author">.<H
2430: 32 3e 41 75 74 68 6f 72 3c 2f 48 32 3e 0a 3c 2f  2>Author</H2>.</
2440: 41 3e 0a 0a 42 72 75 6e 6f 20 48 61 69 62 6c 65  A>..Bruno Haible
2450: 20 26 6c 74 3b 62 72 75 6e 6f 40 63 6c 69 73 70   &lt;bruno@clisp
2460: 2e 6f 72 67 26 67 74 3b 0a 0a 3c 41 20 4e 41 4d  .org&gt;..<A NAM
2470: 45 3d 22 41 63 6b 6e 6f 77 6c 65 64 67 65 6d 65  E="Acknowledgeme
2480: 6e 74 73 22 3e 0a 3c 48 32 3e 41 63 6b 6e 6f 77  nts">.<H2>Acknow
2490: 6c 65 64 67 65 6d 65 6e 74 73 3c 2f 48 32 3e 0a  ledgements</H2>.
24a0: 3c 2f 41 3e 0a 0a 4d 61 6e 79 20 69 64 65 61 73  </A>..Many ideas
24b0: 20 77 65 72 65 20 63 72 69 62 62 65 64 20 66 72   were cribbed fr
24c0: 6f 6d 20 74 68 65 20 67 63 63 20 73 6f 75 72 63  om the gcc sourc
24d0: 65 2e 0a 3c 50 3e 0a 0a 3c 48 52 3e 0a 0a 3c 41  e..<P>..<HR>..<A
24e0: 44 44 52 45 53 53 3e 43 41 4c 4c 42 41 43 4b 20  DDRESS>CALLBACK 
24f0: 6d 61 6e 75 61 6c 20 70 61 67 65 3c 42 52 3e 0a  manual page<BR>.
2500: 42 72 75 6e 6f 20 48 61 69 62 6c 65 20 26 6c 74  Bruno Haible &lt
2510: 3b 62 72 75 6e 6f 40 63 6c 69 73 70 2e 6f 72 67  ;bruno@clisp.org
2520: 26 67 74 3b 0a 3c 2f 41 44 44 52 45 53 53 3e 0a  &gt;.</ADDRESS>.
2530: 3c 50 3e 0a 4c 61 73 74 20 6d 6f 64 69 66 69 65  <P>.Last modifie
2540: 64 3a 20 31 34 20 4a 61 6e 75 61 72 79 20 32 30  d: 14 January 20
2550: 30 31 2e 0a 0a 3c 2f 42 4f 44 59 3e 0a           01...</BODY>.