home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / OAKARG.H < prev    next >
C/C++ Source or Header  |  1990-10-18  |  2KB  |  78 lines

  1. /*
  2.     oakarg.h
  3.  
  4.     % portable macros for creating variable argument functions
  5.  
  6.     OWL 1.2
  7.     Copyright (c) 1989, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.     12/10/89 jmd    created
  13.      4/30/90 jmd    added ova_list macro for stdargs
  14.  
  15.      8/08/90 jmd    added stuff for STACK_MINUS
  16.     10/18/90 jmd    moved O_STACKMINUS define to oakland.h
  17.  
  18.     This header defines the ova_ set of macros.  These are defined
  19.     to work in the same manner as the ANSI-proposed stdarg macros.
  20.     There are three versions:
  21.     1) using UNIX-style varargs (define O_VARARG in oakpriv.h)
  22.     2) using ANSI-style stdargs    (define O_STDARG in oakpriv.h)
  23.     3) emulating stdargs with our own macros.  (O_VARARG and O_STDARG are undefined)
  24. */
  25.  
  26. #ifdef O_VARARG
  27. /* use UNIX-style varargs for variable argument processing */
  28.  
  29. # include <varargs.h>
  30.  
  31. # define ova_alist                , va_alist
  32. # define ova_dcl                va_dcl
  33. # define ova_list                va_list
  34. # define ova_start(pvar, prev)     va_start(pvar)
  35. # define ova_arg(pvar, type)    va_arg(pvar, type)
  36. # define ova_end(pvar)             va_end(pvar)
  37.  
  38. # define OARGS
  39.  
  40. #endif
  41.  
  42. #ifdef O_STDARG
  43. /* use ANSI stdargs for variable argument processing */
  44.  
  45. # include <stdarg.h>
  46.  
  47. # define ova_alist                , ...
  48. # define ova_dcl
  49. # define ova_list                va_list
  50. # define ova_start(pvar, prev)     va_start(pvar, prev)
  51. # define ova_arg(pvar, type)    va_arg(pvar, type)
  52. # define ova_end(pvar)             va_end(pvar)
  53.  
  54. # define OARGS
  55.  
  56. #endif
  57.  
  58. #ifndef OARGS
  59. /* use our own macros for variable argument processing */
  60.  
  61. # define ova_alist    , ...
  62. # define ova_dcl
  63. # define ova_list    char *
  64.  
  65. #ifndef O_STACKMINUS
  66. # define ova_start(pvar, prev)     (pvar = (ova_list)&prev + sizeof(prev))
  67. # define ova_arg(pvar, type)    ((type *)(pvar += sizeof(type)))[-1]
  68. # define ova_end(pvar)             (pvar = NULL)
  69.  
  70. #else  /* for DG */
  71. # define ova_start(pvar, prev)     (pvar = (ova_list)&prev - sizeof(prev))
  72. # define ova_arg(pvar, type)    ((type *)(pvar -= sizeof(type)))[1]
  73. # define ova_end(pvar)             (pvar = NULL)
  74. #endif
  75.  
  76. #endif
  77.  
  78.