Contents

  1. fish.c
  2. fugly.h

fish.c 1/2

[
top][prev][next]
#include <stdio.h>
#include <stdarg.h>


#if 0
/*32 bit code - doesn't work*/

static void
foo (FILE * f, ...)
{
  va_list va;
  char *p;
  int i = 0;
  va_start (va, f);

  while (p = va_arg (va, char *))
    {
      fprintf (f, "Arg %d: %s\n", i++, p);
    }

  va_end (va);
}
#else

#define CAST(A) ((size_t) (A))
#define foo(...) foo_ FISH(__VA_ARGS__)

#include "fugly.h"

static void
foo_ (size_t _f, ...)
{
  FILE *f = (FILE *) _f;
  va_list va;
  char *p;
  int i = 0;

  va_start (va, _f);

  while (p = (char *) va_arg (va, size_t))
    {
      fprintf (f, "Arg %d: %s\n", i++, p);
    }

  va_end (va);
}
#endif



int
main (int argc, char *argv[])
{
  foo (stdout, "hello", 0);
  foo (stdout, "hello", "world", 0);
  foo (stdout, "hello", "world", "fish", 0);
  foo (stdout, "hello", "world", "fish", "soup", 0);
  foo (stdout, "hello", "world", "fish", "soup", "octopus", 0);
  foo (stdout, "hello", "world", "fish", "soup", "octopus", "banana", 0);
}

fugly.h 2/2

[
top][prev][next]
#define FISH(...) \
	SOUP(__VA_ARGS__,OCTOPUS(__VA_ARGS__))
#define SOUP(...) \
         TREE(__VA_ARGS__)
#define TREE(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,N,...) N
#define OCTOPUS(...) FISH15(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH14(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH13(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH12(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH11(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0),FISH10(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0),FISH9(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0),FISH8(__VA_ARGS__,0,0,0,0,0,0,0,0,0),FISH7(__VA_ARGS__,0,0,0,0,0,0,0,0),FISH6(__VA_ARGS__,0,0,0,0,0,0,0),FISH5(__VA_ARGS__,0,0,0,0,0,0),FISH4(__VA_ARGS__,0,0,0,0,0),FISH3(__VA_ARGS__,0,0,0,0),FISH2(__VA_ARGS__,0,0,0),FISH1(__VA_ARGS__,0,0),FISH0(__VA_ARGS__,0)

#define FISH0(B...) ()
#define FISH1(A1,B...) (CAST(A1))
#define FISH2(A1,A2,B...) (CAST(A1),CAST(A2))
#define FISH3(A1,A2,A3,B...) (CAST(A1),CAST(A2),CAST(A3))
#define FISH4(A1,A2,A3,A4,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4))
#define FISH5(A1,A2,A3,A4,A5,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5))
#define FISH6(A1,A2,A3,A4,A5,A6,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6))
#define FISH7(A1,A2,A3,A4,A5,A6,A7,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7))
#define FISH8(A1,A2,A3,A4,A5,A6,A7,A8,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8))
#define FISH9(A1,A2,A3,A4,A5,A6,A7,A8,A9,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9))
#define FISH10(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10))
#define FISH11(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11))
#define FISH12(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12))
#define FISH13(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13))
#define FISH14(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13),CAST(A14))
#define FISH15(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13),CAST(A14),CAST(A15))

Generated by GNU enscript 1.6.4.