This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gcc4 Segmentation fault


This file compiled OK with gcc4 from gcc4-4.0.0-0.5.i386.rpm

John Ellson
$ gcc4 --version
gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-8)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ uname -a
Linux ontap 2.6.9-1.667.ellsonsmp #1 SMP Wed Nov 3 10:28:43 EST 2004 i686 i686 i386 GNU/Linux

$ cat /etc/redhat-release
Fedora Core release Rawhide (Rawhide)

$ /usr/bin/gcc4 -DHAVE_CONFIG_H -I. -I. -I../.. -I../.. -I../../dotneato/gvrender -I../../pathplan -I../../graph -I../../cdt -I../../gd -DXTHREADS -I/home/ellson/FIX/Linux.i686/include -I/usr/include/freetype2 -I/usr/X11R6/include -I/usr/include/libpng12 -I/home/ellson/FIX/Linux.i686/include -g -O2 -Wall -MT shapes.lo -MD -MP -MF .deps/shapes.Tpo -c shapes.c  -fPIC -DPIC -o .libs/shapes.o
shapes.c: In function 'poly_init':
shapes.c:431: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
Preprocessed source stored into /tmp/cchh0kek.out file, please attach this to your bugreport.

$ cat /tmp/cchh0kek.out
// /usr/libexec/gcc/i386-redhat-linux/4.0.0/cc1 -quiet -I. -I. -I../.. -I../.. -I../../dotneato/gvrender -I../../pathplan -I../../graph -I../../cdt -I../../gd -I/home/ellson/FIX/Linux.i686/include -I/usr/include/freetype2 -I/usr/X11R6/include -I/usr/include/libpng12 -I/home/ellson/FIX/Linux.i686/include -MD .libs/shapes.d -MF .deps/shapes.Tpo -MP -MT shapes.lo -MQ .libs/shapes.o -DHAVE_CONFIG_H -DXTHREADS -DPIC shapes.c -quiet -dumpbase shapes.c -auxbase-strip .libs/shapes.o -g -O2 -Wall -fPIC -o - -frandom-seed=0
# 1 "shapes.c"
# 1 "/home/ellson/FIX/Linux.i686/build/graphviz.branch/dotneato/common//"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "shapes.c"
# 11 "shapes.c"
# 1 "render.h" 1
# 15 "render.h"
# 1 "../../config.h" 1
# 16 "render.h" 2



# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 1 3 4
# 11 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/syslimits.h" 1 3 4






# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 1 3 4
# 122 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 3 4
# 1 "/usr/include/limits.h" 1 3 4
# 26 "/usr/include/limits.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 314 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 315 "/usr/include/features.h" 2 3 4
# 337 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 338 "/usr/include/features.h" 2 3 4
# 27 "/usr/include/limits.h" 2 3 4
# 144 "/usr/include/limits.h" 3 4
# 1 "/usr/include/bits/posix1_lim.h" 1 3 4
# 153 "/usr/include/bits/posix1_lim.h" 3 4
# 1 "/usr/include/bits/local_lim.h" 1 3 4
# 36 "/usr/include/bits/local_lim.h" 3 4
# 1 "/usr/include/linux/limits.h" 1 3 4
# 37 "/usr/include/bits/local_lim.h" 2 3 4
# 154 "/usr/include/bits/posix1_lim.h" 2 3 4
# 145 "/usr/include/limits.h" 2 3 4



# 1 "/usr/include/bits/posix2_lim.h" 1 3 4
# 149 "/usr/include/limits.h" 2 3 4
# 123 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 2 3 4
# 8 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/syslimits.h" 2 3 4
# 12 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 2 3 4
# 20 "render.h" 2






# 1 "/usr/include/signal.h" 1 3 4
# 31 "/usr/include/signal.h" 3 4


# 1 "/usr/include/bits/sigset.h" 1 3 4
# 23 "/usr/include/bits/sigset.h" 3 4
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 103 "/usr/include/bits/sigset.h" 3 4
extern int __sigismember (__const __sigset_t *, int);
extern int __sigaddset (__sigset_t *, int);
extern int __sigdelset (__sigset_t *, int);
# 117 "/usr/include/bits/sigset.h" 3 4
extern __inline int __sigismember (__const __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return (__set->__val[__word] & __mask) ? 1 : 0; }
extern __inline int __sigaddset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] |= __mask), 0); }
extern __inline int __sigdelset ( __sigset_t *__set, int __sig) { unsigned long int __mask = (((unsigned long int) 1) << (((__sig) - 1) % (8 * sizeof (unsigned long int)))); unsigned long int __word = (((__sig) - 1) / (8 * sizeof (unsigned long int))); return ((__set->__val[__word] &= ~__mask), 0); }
# 34 "/usr/include/signal.h" 2 3 4







typedef __sig_atomic_t sig_atomic_t;








typedef __sigset_t sigset_t;






# 1 "/usr/include/bits/types.h" 1 3 4
# 28 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 29 "/usr/include/bits/types.h" 2 3 4


# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 214 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 3 4
typedef unsigned int size_t;
# 32 "/usr/include/bits/types.h" 2 3 4


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;


typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;




__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;







__extension__ typedef long long int __quad_t;
__extension__ typedef unsigned long long int __u_quad_t;
# 129 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 130 "/usr/include/bits/types.h" 2 3 4






__extension__ typedef __u_quad_t __dev_t;
__extension__ typedef unsigned int __uid_t;
__extension__ typedef unsigned int __gid_t;
__extension__ typedef unsigned long int __ino_t;
__extension__ typedef __u_quad_t __ino64_t;
__extension__ typedef unsigned int __mode_t;
__extension__ typedef unsigned int __nlink_t;
__extension__ typedef long int __off_t;
__extension__ typedef __quad_t __off64_t;
__extension__ typedef int __pid_t;
__extension__ typedef struct { int __val[2]; } __fsid_t;
__extension__ typedef long int __clock_t;
__extension__ typedef unsigned long int __rlim_t;
__extension__ typedef __u_quad_t __rlim64_t;
__extension__ typedef unsigned int __id_t;
__extension__ typedef long int __time_t;
__extension__ typedef unsigned int __useconds_t;
__extension__ typedef long int __suseconds_t;

__extension__ typedef int __daddr_t;
__extension__ typedef long int __swblk_t;
__extension__ typedef int __key_t;


__extension__ typedef int __clockid_t;


__extension__ typedef int __timer_t;


__extension__ typedef long int __blksize_t;




__extension__ typedef long int __blkcnt_t;
__extension__ typedef __quad_t __blkcnt64_t;


__extension__ typedef unsigned long int __fsblkcnt_t;
__extension__ typedef __u_quad_t __fsblkcnt64_t;


__extension__ typedef unsigned long int __fsfilcnt_t;
__extension__ typedef __u_quad_t __fsfilcnt64_t;

__extension__ typedef int __ssize_t;



typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;


__extension__ typedef int __intptr_t;


__extension__ typedef unsigned int __socklen_t;
# 58 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/bits/signum.h" 1 3 4
# 59 "/usr/include/signal.h" 2 3 4
# 75 "/usr/include/signal.h" 3 4
typedef void (*__sighandler_t) (int);




extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
     __attribute__ ((__nothrow__));
# 90 "/usr/include/signal.h" 3 4


extern __sighandler_t signal (int __sig, __sighandler_t __handler) __attribute__ ((__nothrow__));
# 103 "/usr/include/signal.h" 3 4

# 115 "/usr/include/signal.h" 3 4
extern int kill (__pid_t __pid, int __sig) __attribute__ ((__nothrow__));






extern int killpg (__pid_t __pgrp, int __sig) __attribute__ ((__nothrow__));




extern int raise (int __sig) __attribute__ ((__nothrow__));




extern __sighandler_t ssignal (int __sig, __sighandler_t __handler) __attribute__ ((__nothrow__));
extern int gsignal (int __sig) __attribute__ ((__nothrow__));




extern void psignal (int __sig, __const char *__s);
# 150 "/usr/include/signal.h" 3 4
extern int __sigpause (int __sig_or_mask, int __is_sig);
# 179 "/usr/include/signal.h" 3 4
extern int sigblock (int __mask) __attribute__ ((__nothrow__));


extern int sigsetmask (int __mask) __attribute__ ((__nothrow__));


extern int siggetmask (void) __attribute__ ((__nothrow__));
# 199 "/usr/include/signal.h" 3 4
typedef __sighandler_t sig_t;







# 1 "/usr/include/time.h" 1 3 4
# 118 "/usr/include/time.h" 3 4
struct timespec
  {
    __time_t tv_sec;
    long int tv_nsec;
  };
# 208 "/usr/include/signal.h" 2 3 4


# 1 "/usr/include/bits/siginfo.h" 1 3 4
# 25 "/usr/include/bits/siginfo.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 26 "/usr/include/bits/siginfo.h" 2 3 4







typedef union sigval
  {
    int sival_int;
    void *sival_ptr;
  } sigval_t;
# 51 "/usr/include/bits/siginfo.h" 3 4
typedef struct siginfo
  {
    int si_signo;
    int si_errno;

    int si_code;

    union
      {
 int _pad[((128 / sizeof (int)) - 3)];


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
   } _kill;


 struct
   {
     int si_tid;
     int si_overrun;
     sigval_t si_sigval;
   } _timer;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     sigval_t si_sigval;
   } _rt;


 struct
   {
     __pid_t si_pid;
     __uid_t si_uid;
     int si_status;
     __clock_t si_utime;
     __clock_t si_stime;
   } _sigchld;


 struct
   {
     void *si_addr;
   } _sigfault;


 struct
   {
     long int si_band;
     int si_fd;
   } _sigpoll;
      } _sifields;
  } siginfo_t;
# 129 "/usr/include/bits/siginfo.h" 3 4
enum
{
  SI_ASYNCNL = -60,

  SI_TKILL = -6,

  SI_SIGIO,

  SI_ASYNCIO,

  SI_MESGQ,

  SI_TIMER,

  SI_QUEUE,

  SI_USER,

  SI_KERNEL = 0x80

};



enum
{
  ILL_ILLOPC = 1,

  ILL_ILLOPN,

  ILL_ILLADR,

  ILL_ILLTRP,

  ILL_PRVOPC,

  ILL_PRVREG,

  ILL_COPROC,

  ILL_BADSTK

};


enum
{
  FPE_INTDIV = 1,

  FPE_INTOVF,

  FPE_FLTDIV,

  FPE_FLTOVF,

  FPE_FLTUND,

  FPE_FLTRES,

  FPE_FLTINV,

  FPE_FLTSUB

};


enum
{
  SEGV_MAPERR = 1,

  SEGV_ACCERR

};


enum
{
  BUS_ADRALN = 1,

  BUS_ADRERR,

  BUS_OBJERR

};


enum
{
  TRAP_BRKPT = 1,

  TRAP_TRACE

};


enum
{
  CLD_EXITED = 1,

  CLD_KILLED,

  CLD_DUMPED,

  CLD_TRAPPED,

  CLD_STOPPED,

  CLD_CONTINUED

};


enum
{
  POLL_IN = 1,

  POLL_OUT,

  POLL_MSG,

  POLL_ERR,

  POLL_PRI,

  POLL_HUP

};
# 273 "/usr/include/bits/siginfo.h" 3 4
typedef struct sigevent
  {
    sigval_t sigev_value;
    int sigev_signo;
    int sigev_notify;

    union
      {
 int _pad[((64 / sizeof (int)) - 3)];



 __pid_t _tid;

 struct
   {
     void (*_function) (sigval_t);
     void *_attribute;
   } _sigev_thread;
      } _sigev_un;
  } sigevent_t;






enum
{
  SIGEV_SIGNAL = 0,

  SIGEV_NONE,

  SIGEV_THREAD,


  SIGEV_THREAD_ID = 4

};
# 211 "/usr/include/signal.h" 2 3 4



extern int sigemptyset (sigset_t *__set) __attribute__ ((__nothrow__));


extern int sigfillset (sigset_t *__set) __attribute__ ((__nothrow__));


extern int sigaddset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__));


extern int sigdelset (sigset_t *__set, int __signo) __attribute__ ((__nothrow__));


extern int sigismember (__const sigset_t *__set, int __signo) __attribute__ ((__nothrow__));
# 243 "/usr/include/signal.h" 3 4
# 1 "/usr/include/bits/sigaction.h" 1 3 4
# 25 "/usr/include/bits/sigaction.h" 3 4
struct sigaction
  {


    union
      {

 __sighandler_t sa_handler;

 void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;







    __sigset_t sa_mask;


    int sa_flags;


    void (*sa_restorer) (void);
  };
# 244 "/usr/include/signal.h" 2 3 4


extern int sigprocmask (int __how, __const sigset_t *__restrict __set,
   sigset_t *__restrict __oset) __attribute__ ((__nothrow__));






extern int sigsuspend (__const sigset_t *__set);


extern int sigaction (int __sig, __const struct sigaction *__restrict __act,
        struct sigaction *__restrict __oact) __attribute__ ((__nothrow__));


extern int sigpending (sigset_t *__set) __attribute__ ((__nothrow__));






extern int sigwait (__const sigset_t *__restrict __set, int *__restrict __sig);






extern int sigwaitinfo (__const sigset_t *__restrict __set,
   siginfo_t *__restrict __info);






extern int sigtimedwait (__const sigset_t *__restrict __set,
    siginfo_t *__restrict __info,
    __const struct timespec *__restrict __timeout);



extern int sigqueue (__pid_t __pid, int __sig, __const union sigval __val)
     __attribute__ ((__nothrow__));
# 299 "/usr/include/signal.h" 3 4
extern __const char *__const _sys_siglist[65];
extern __const char *__const sys_siglist[65];


struct sigvec
  {
    __sighandler_t sv_handler;
    int sv_mask;

    int sv_flags;

  };
# 323 "/usr/include/signal.h" 3 4
extern int sigvec (int __sig, __const struct sigvec *__vec,
     struct sigvec *__ovec) __attribute__ ((__nothrow__));



# 1 "/usr/include/bits/sigcontext.h" 1 3 4
# 28 "/usr/include/bits/sigcontext.h" 3 4
# 1 "/usr/include/asm/sigcontext.h" 1 3 4
# 18 "/usr/include/asm/sigcontext.h" 3 4
struct _fpreg {
 unsigned short significand[4];
 unsigned short exponent;
};

struct _fpxreg {
 unsigned short significand[4];
 unsigned short exponent;
 unsigned short padding[3];
};

struct _xmmreg {
 unsigned long element[4];
};

struct _fpstate {

 unsigned long cw;
 unsigned long sw;
 unsigned long tag;
 unsigned long ipoff;
 unsigned long cssel;
 unsigned long dataoff;
 unsigned long datasel;
 struct _fpreg _st[8];
 unsigned short status;
 unsigned short magic;


 unsigned long _fxsr_env[6];
 unsigned long mxcsr;
 unsigned long reserved;
 struct _fpxreg _fxsr_st[8];
 struct _xmmreg _xmm[8];
 unsigned long padding[56];
};



struct sigcontext {
 unsigned short gs, __gsh;
 unsigned short fs, __fsh;
 unsigned short es, __esh;
 unsigned short ds, __dsh;
 unsigned long edi;
 unsigned long esi;
 unsigned long ebp;
 unsigned long esp;
 unsigned long ebx;
 unsigned long edx;
 unsigned long ecx;
 unsigned long eax;
 unsigned long trapno;
 unsigned long err;
 unsigned long eip;
 unsigned short cs, __csh;
 unsigned long eflags;
 unsigned long esp_at_signal;
 unsigned short ss, __ssh;
 struct _fpstate * fpstate;
 unsigned long oldmask;
 unsigned long cr2;
};
# 29 "/usr/include/bits/sigcontext.h" 2 3 4
# 329 "/usr/include/signal.h" 2 3 4


extern int sigreturn (struct sigcontext *__scp) __attribute__ ((__nothrow__));
# 341 "/usr/include/signal.h" 3 4
extern int siginterrupt (int __sig, int __interrupt) __attribute__ ((__nothrow__));

# 1 "/usr/include/bits/sigstack.h" 1 3 4
# 26 "/usr/include/bits/sigstack.h" 3 4
struct sigstack
  {
    void *ss_sp;
    int ss_onstack;
  };



enum
{
  SS_ONSTACK = 1,

  SS_DISABLE

};
# 50 "/usr/include/bits/sigstack.h" 3 4
typedef struct sigaltstack
  {
    void *ss_sp;
    int ss_flags;
    size_t ss_size;
  } stack_t;
# 344 "/usr/include/signal.h" 2 3 4
# 352 "/usr/include/signal.h" 3 4
extern int sigstack (struct sigstack *__ss, struct sigstack *__oss) __attribute__ ((__nothrow__));



extern int sigaltstack (__const struct sigaltstack *__restrict __ss,
   struct sigaltstack *__restrict __oss) __attribute__ ((__nothrow__));
# 380 "/usr/include/signal.h" 3 4
# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
# 23 "/usr/include/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/bits/sched.h" 1 3 4
# 83 "/usr/include/bits/sched.h" 3 4
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3 4


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;





__extension__ typedef long long __pthread_cond_align_t;




typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
  char __padding[48 - sizeof (struct _pthread_fastlock)
   - sizeof (_pthread_descr) - sizeof (__pthread_cond_align_t)];
  __pthread_cond_align_t __align;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;
# 150 "/usr/include/bits/pthreadtypes.h" 3 4
typedef unsigned long int pthread_t;
# 381 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/bits/sigthread.h" 1 3 4
# 31 "/usr/include/bits/sigthread.h" 3 4
extern int pthread_sigmask (int __how,
       __const __sigset_t *__restrict __newmask,
       __sigset_t *__restrict __oldmask)__attribute__ ((__nothrow__));


extern int pthread_kill (pthread_t __threadid, int __signo) __attribute__ ((__nothrow__));
# 382 "/usr/include/signal.h" 2 3 4






extern int __libc_current_sigrtmin (void) __attribute__ ((__nothrow__));

extern int __libc_current_sigrtmax (void) __attribute__ ((__nothrow__));




# 27 "render.h" 2
# 1 "/usr/include/assert.h" 1 3 4
# 65 "/usr/include/assert.h" 3 4



extern void __assert_fail (__const char *__assertion, __const char *__file,
      unsigned int __line, __const char *__function)
     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, __const char *__file,
      unsigned int __line,
      __const char *__function)
     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));



# 28 "render.h" 2
# 1 "/usr/include/math.h" 1 3 4
# 29 "/usr/include/math.h" 3 4




# 1 "/usr/include/bits/huge_val.h" 1 3 4
# 34 "/usr/include/math.h" 2 3 4
# 46 "/usr/include/math.h" 3 4
# 1 "/usr/include/bits/mathdef.h" 1 3 4
# 47 "/usr/include/math.h" 2 3 4
# 70 "/usr/include/math.h" 3 4
# 1 "/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/usr/include/bits/mathcalls.h" 3 4


extern double acos (double __x) __attribute__ ((__nothrow__)); extern double __acos (double __x) __attribute__ ((__nothrow__));

extern double asin (double __x) __attribute__ ((__nothrow__)); extern double __asin (double __x) __attribute__ ((__nothrow__));

extern double atan (double __x) __attribute__ ((__nothrow__)); extern double __atan (double __x) __attribute__ ((__nothrow__));

extern double atan2 (double __y, double __x) __attribute__ ((__nothrow__)); extern double __atan2 (double __y, double __x) __attribute__ ((__nothrow__));


extern double cos (double __x) __attribute__ ((__nothrow__)); extern double __cos (double __x) __attribute__ ((__nothrow__));

extern double sin (double __x) __attribute__ ((__nothrow__)); extern double __sin (double __x) __attribute__ ((__nothrow__));

extern double tan (double __x) __attribute__ ((__nothrow__)); extern double __tan (double __x) __attribute__ ((__nothrow__));




extern double cosh (double __x) __attribute__ ((__nothrow__)); extern double __cosh (double __x) __attribute__ ((__nothrow__));

extern double sinh (double __x) __attribute__ ((__nothrow__)); extern double __sinh (double __x) __attribute__ ((__nothrow__));

extern double tanh (double __x) __attribute__ ((__nothrow__)); extern double __tanh (double __x) __attribute__ ((__nothrow__));

# 87 "/usr/include/bits/mathcalls.h" 3 4


extern double acosh (double __x) __attribute__ ((__nothrow__)); extern double __acosh (double __x) __attribute__ ((__nothrow__));

extern double asinh (double __x) __attribute__ ((__nothrow__)); extern double __asinh (double __x) __attribute__ ((__nothrow__));

extern double atanh (double __x) __attribute__ ((__nothrow__)); extern double __atanh (double __x) __attribute__ ((__nothrow__));







extern double exp (double __x) __attribute__ ((__nothrow__)); extern double __exp (double __x) __attribute__ ((__nothrow__));


extern double frexp (double __x, int *__exponent) __attribute__ ((__nothrow__)); extern double __frexp (double __x, int *__exponent) __attribute__ ((__nothrow__));


extern double ldexp (double __x, int __exponent) __attribute__ ((__nothrow__)); extern double __ldexp (double __x, int __exponent) __attribute__ ((__nothrow__));


extern double log (double __x) __attribute__ ((__nothrow__)); extern double __log (double __x) __attribute__ ((__nothrow__));


extern double log10 (double __x) __attribute__ ((__nothrow__)); extern double __log10 (double __x) __attribute__ ((__nothrow__));


extern double modf (double __x, double *__iptr) __attribute__ ((__nothrow__)); extern double __modf (double __x, double *__iptr) __attribute__ ((__nothrow__));

# 127 "/usr/include/bits/mathcalls.h" 3 4


extern double expm1 (double __x) __attribute__ ((__nothrow__)); extern double __expm1 (double __x) __attribute__ ((__nothrow__));


extern double log1p (double __x) __attribute__ ((__nothrow__)); extern double __log1p (double __x) __attribute__ ((__nothrow__));


extern double logb (double __x) __attribute__ ((__nothrow__)); extern double __logb (double __x) __attribute__ ((__nothrow__));

# 152 "/usr/include/bits/mathcalls.h" 3 4


extern double pow (double __x, double __y) __attribute__ ((__nothrow__)); extern double __pow (double __x, double __y) __attribute__ ((__nothrow__));


extern double sqrt (double __x) __attribute__ ((__nothrow__)); extern double __sqrt (double __x) __attribute__ ((__nothrow__));





extern double hypot (double __x, double __y) __attribute__ ((__nothrow__)); extern double __hypot (double __x, double __y) __attribute__ ((__nothrow__));






extern double cbrt (double __x) __attribute__ ((__nothrow__)); extern double __cbrt (double __x) __attribute__ ((__nothrow__));








extern double ceil (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern double __ceil (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern double fabs (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern double __fabs (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern double floor (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern double __floor (double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern double fmod (double __x, double __y) __attribute__ ((__nothrow__)); extern double __fmod (double __x, double __y) __attribute__ ((__nothrow__));




extern int __isinf (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int __finite (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern int isinf (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int finite (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern double drem (double __x, double __y) __attribute__ ((__nothrow__)); extern double __drem (double __x, double __y) __attribute__ ((__nothrow__));



extern double significand (double __x) __attribute__ ((__nothrow__)); extern double __significand (double __x) __attribute__ ((__nothrow__));





extern double copysign (double __x, double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern double __copysign (double __x, double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3 4
extern int __isnan (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));



extern int isnan (double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern double j0 (double) __attribute__ ((__nothrow__)); extern double __j0 (double) __attribute__ ((__nothrow__));
extern double j1 (double) __attribute__ ((__nothrow__)); extern double __j1 (double) __attribute__ ((__nothrow__));
extern double jn (int, double) __attribute__ ((__nothrow__)); extern double __jn (int, double) __attribute__ ((__nothrow__));
extern double y0 (double) __attribute__ ((__nothrow__)); extern double __y0 (double) __attribute__ ((__nothrow__));
extern double y1 (double) __attribute__ ((__nothrow__)); extern double __y1 (double) __attribute__ ((__nothrow__));
extern double yn (int, double) __attribute__ ((__nothrow__)); extern double __yn (int, double) __attribute__ ((__nothrow__));






extern double erf (double) __attribute__ ((__nothrow__)); extern double __erf (double) __attribute__ ((__nothrow__));
extern double erfc (double) __attribute__ ((__nothrow__)); extern double __erfc (double) __attribute__ ((__nothrow__));
extern double lgamma (double) __attribute__ ((__nothrow__)); extern double __lgamma (double) __attribute__ ((__nothrow__));

# 265 "/usr/include/bits/mathcalls.h" 3 4
extern double gamma (double) __attribute__ ((__nothrow__)); extern double __gamma (double) __attribute__ ((__nothrow__));






extern double lgamma_r (double, int *__signgamp) __attribute__ ((__nothrow__)); extern double __lgamma_r (double, int *__signgamp) __attribute__ ((__nothrow__));







extern double rint (double __x) __attribute__ ((__nothrow__)); extern double __rint (double __x) __attribute__ ((__nothrow__));


extern double nextafter (double __x, double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern double remainder (double __x, double __y) __attribute__ ((__nothrow__)); extern double __remainder (double __x, double __y) __attribute__ ((__nothrow__));



extern double scalbn (double __x, int __n) __attribute__ ((__nothrow__)); extern double __scalbn (double __x, int __n) __attribute__ ((__nothrow__));



extern int ilogb (double __x) __attribute__ ((__nothrow__)); extern int __ilogb (double __x) __attribute__ ((__nothrow__));
# 71 "/usr/include/math.h" 2 3 4
# 93 "/usr/include/math.h" 3 4
# 1 "/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/usr/include/bits/mathcalls.h" 3 4


extern float acosf (float __x) __attribute__ ((__nothrow__)); extern float __acosf (float __x) __attribute__ ((__nothrow__));

extern float asinf (float __x) __attribute__ ((__nothrow__)); extern float __asinf (float __x) __attribute__ ((__nothrow__));

extern float atanf (float __x) __attribute__ ((__nothrow__)); extern float __atanf (float __x) __attribute__ ((__nothrow__));

extern float atan2f (float __y, float __x) __attribute__ ((__nothrow__)); extern float __atan2f (float __y, float __x) __attribute__ ((__nothrow__));


extern float cosf (float __x) __attribute__ ((__nothrow__)); extern float __cosf (float __x) __attribute__ ((__nothrow__));

extern float sinf (float __x) __attribute__ ((__nothrow__)); extern float __sinf (float __x) __attribute__ ((__nothrow__));

extern float tanf (float __x) __attribute__ ((__nothrow__)); extern float __tanf (float __x) __attribute__ ((__nothrow__));




extern float coshf (float __x) __attribute__ ((__nothrow__)); extern float __coshf (float __x) __attribute__ ((__nothrow__));

extern float sinhf (float __x) __attribute__ ((__nothrow__)); extern float __sinhf (float __x) __attribute__ ((__nothrow__));

extern float tanhf (float __x) __attribute__ ((__nothrow__)); extern float __tanhf (float __x) __attribute__ ((__nothrow__));

# 87 "/usr/include/bits/mathcalls.h" 3 4


extern float acoshf (float __x) __attribute__ ((__nothrow__)); extern float __acoshf (float __x) __attribute__ ((__nothrow__));

extern float asinhf (float __x) __attribute__ ((__nothrow__)); extern float __asinhf (float __x) __attribute__ ((__nothrow__));

extern float atanhf (float __x) __attribute__ ((__nothrow__)); extern float __atanhf (float __x) __attribute__ ((__nothrow__));







extern float expf (float __x) __attribute__ ((__nothrow__)); extern float __expf (float __x) __attribute__ ((__nothrow__));


extern float frexpf (float __x, int *__exponent) __attribute__ ((__nothrow__)); extern float __frexpf (float __x, int *__exponent) __attribute__ ((__nothrow__));


extern float ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__)); extern float __ldexpf (float __x, int __exponent) __attribute__ ((__nothrow__));


extern float logf (float __x) __attribute__ ((__nothrow__)); extern float __logf (float __x) __attribute__ ((__nothrow__));


extern float log10f (float __x) __attribute__ ((__nothrow__)); extern float __log10f (float __x) __attribute__ ((__nothrow__));


extern float modff (float __x, float *__iptr) __attribute__ ((__nothrow__)); extern float __modff (float __x, float *__iptr) __attribute__ ((__nothrow__));

# 127 "/usr/include/bits/mathcalls.h" 3 4


extern float expm1f (float __x) __attribute__ ((__nothrow__)); extern float __expm1f (float __x) __attribute__ ((__nothrow__));


extern float log1pf (float __x) __attribute__ ((__nothrow__)); extern float __log1pf (float __x) __attribute__ ((__nothrow__));


extern float logbf (float __x) __attribute__ ((__nothrow__)); extern float __logbf (float __x) __attribute__ ((__nothrow__));

# 152 "/usr/include/bits/mathcalls.h" 3 4


extern float powf (float __x, float __y) __attribute__ ((__nothrow__)); extern float __powf (float __x, float __y) __attribute__ ((__nothrow__));


extern float sqrtf (float __x) __attribute__ ((__nothrow__)); extern float __sqrtf (float __x) __attribute__ ((__nothrow__));





extern float hypotf (float __x, float __y) __attribute__ ((__nothrow__)); extern float __hypotf (float __x, float __y) __attribute__ ((__nothrow__));






extern float cbrtf (float __x) __attribute__ ((__nothrow__)); extern float __cbrtf (float __x) __attribute__ ((__nothrow__));








extern float ceilf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern float __ceilf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern float fabsf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern float __fabsf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern float floorf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern float __floorf (float __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern float fmodf (float __x, float __y) __attribute__ ((__nothrow__)); extern float __fmodf (float __x, float __y) __attribute__ ((__nothrow__));




extern int __isinff (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int __finitef (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern int isinff (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int finitef (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern float dremf (float __x, float __y) __attribute__ ((__nothrow__)); extern float __dremf (float __x, float __y) __attribute__ ((__nothrow__));



extern float significandf (float __x) __attribute__ ((__nothrow__)); extern float __significandf (float __x) __attribute__ ((__nothrow__));





extern float copysignf (float __x, float __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3 4
extern int __isnanf (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));



extern int isnanf (float __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern float j0f (float) __attribute__ ((__nothrow__)); extern float __j0f (float) __attribute__ ((__nothrow__));
extern float j1f (float) __attribute__ ((__nothrow__)); extern float __j1f (float) __attribute__ ((__nothrow__));
extern float jnf (int, float) __attribute__ ((__nothrow__)); extern float __jnf (int, float) __attribute__ ((__nothrow__));
extern float y0f (float) __attribute__ ((__nothrow__)); extern float __y0f (float) __attribute__ ((__nothrow__));
extern float y1f (float) __attribute__ ((__nothrow__)); extern float __y1f (float) __attribute__ ((__nothrow__));
extern float ynf (int, float) __attribute__ ((__nothrow__)); extern float __ynf (int, float) __attribute__ ((__nothrow__));






extern float erff (float) __attribute__ ((__nothrow__)); extern float __erff (float) __attribute__ ((__nothrow__));
extern float erfcf (float) __attribute__ ((__nothrow__)); extern float __erfcf (float) __attribute__ ((__nothrow__));
extern float lgammaf (float) __attribute__ ((__nothrow__)); extern float __lgammaf (float) __attribute__ ((__nothrow__));

# 265 "/usr/include/bits/mathcalls.h" 3 4
extern float gammaf (float) __attribute__ ((__nothrow__)); extern float __gammaf (float) __attribute__ ((__nothrow__));






extern float lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__)); extern float __lgammaf_r (float, int *__signgamp) __attribute__ ((__nothrow__));







extern float rintf (float __x) __attribute__ ((__nothrow__)); extern float __rintf (float __x) __attribute__ ((__nothrow__));


extern float nextafterf (float __x, float __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern float remainderf (float __x, float __y) __attribute__ ((__nothrow__)); extern float __remainderf (float __x, float __y) __attribute__ ((__nothrow__));



extern float scalbnf (float __x, int __n) __attribute__ ((__nothrow__)); extern float __scalbnf (float __x, int __n) __attribute__ ((__nothrow__));



extern int ilogbf (float __x) __attribute__ ((__nothrow__)); extern int __ilogbf (float __x) __attribute__ ((__nothrow__));
# 94 "/usr/include/math.h" 2 3 4
# 114 "/usr/include/math.h" 3 4
# 1 "/usr/include/bits/mathcalls.h" 1 3 4
# 53 "/usr/include/bits/mathcalls.h" 3 4


extern long double acosl (long double __x) __attribute__ ((__nothrow__)); extern long double __acosl (long double __x) __attribute__ ((__nothrow__));

extern long double asinl (long double __x) __attribute__ ((__nothrow__)); extern long double __asinl (long double __x) __attribute__ ((__nothrow__));

extern long double atanl (long double __x) __attribute__ ((__nothrow__)); extern long double __atanl (long double __x) __attribute__ ((__nothrow__));

extern long double atan2l (long double __y, long double __x) __attribute__ ((__nothrow__)); extern long double __atan2l (long double __y, long double __x) __attribute__ ((__nothrow__));


extern long double cosl (long double __x) __attribute__ ((__nothrow__)); extern long double __cosl (long double __x) __attribute__ ((__nothrow__));

extern long double sinl (long double __x) __attribute__ ((__nothrow__)); extern long double __sinl (long double __x) __attribute__ ((__nothrow__));

extern long double tanl (long double __x) __attribute__ ((__nothrow__)); extern long double __tanl (long double __x) __attribute__ ((__nothrow__));




extern long double coshl (long double __x) __attribute__ ((__nothrow__)); extern long double __coshl (long double __x) __attribute__ ((__nothrow__));

extern long double sinhl (long double __x) __attribute__ ((__nothrow__)); extern long double __sinhl (long double __x) __attribute__ ((__nothrow__));

extern long double tanhl (long double __x) __attribute__ ((__nothrow__)); extern long double __tanhl (long double __x) __attribute__ ((__nothrow__));

# 87 "/usr/include/bits/mathcalls.h" 3 4


extern long double acoshl (long double __x) __attribute__ ((__nothrow__)); extern long double __acoshl (long double __x) __attribute__ ((__nothrow__));

extern long double asinhl (long double __x) __attribute__ ((__nothrow__)); extern long double __asinhl (long double __x) __attribute__ ((__nothrow__));

extern long double atanhl (long double __x) __attribute__ ((__nothrow__)); extern long double __atanhl (long double __x) __attribute__ ((__nothrow__));







extern long double expl (long double __x) __attribute__ ((__nothrow__)); extern long double __expl (long double __x) __attribute__ ((__nothrow__));


extern long double frexpl (long double __x, int *__exponent) __attribute__ ((__nothrow__)); extern long double __frexpl (long double __x, int *__exponent) __attribute__ ((__nothrow__));


extern long double ldexpl (long double __x, int __exponent) __attribute__ ((__nothrow__)); extern long double __ldexpl (long double __x, int __exponent) __attribute__ ((__nothrow__));


extern long double logl (long double __x) __attribute__ ((__nothrow__)); extern long double __logl (long double __x) __attribute__ ((__nothrow__));


extern long double log10l (long double __x) __attribute__ ((__nothrow__)); extern long double __log10l (long double __x) __attribute__ ((__nothrow__));


extern long double modfl (long double __x, long double *__iptr) __attribute__ ((__nothrow__)); extern long double __modfl (long double __x, long double *__iptr) __attribute__ ((__nothrow__));

# 127 "/usr/include/bits/mathcalls.h" 3 4


extern long double expm1l (long double __x) __attribute__ ((__nothrow__)); extern long double __expm1l (long double __x) __attribute__ ((__nothrow__));


extern long double log1pl (long double __x) __attribute__ ((__nothrow__)); extern long double __log1pl (long double __x) __attribute__ ((__nothrow__));


extern long double logbl (long double __x) __attribute__ ((__nothrow__)); extern long double __logbl (long double __x) __attribute__ ((__nothrow__));

# 152 "/usr/include/bits/mathcalls.h" 3 4


extern long double powl (long double __x, long double __y) __attribute__ ((__nothrow__)); extern long double __powl (long double __x, long double __y) __attribute__ ((__nothrow__));


extern long double sqrtl (long double __x) __attribute__ ((__nothrow__)); extern long double __sqrtl (long double __x) __attribute__ ((__nothrow__));





extern long double hypotl (long double __x, long double __y) __attribute__ ((__nothrow__)); extern long double __hypotl (long double __x, long double __y) __attribute__ ((__nothrow__));






extern long double cbrtl (long double __x) __attribute__ ((__nothrow__)); extern long double __cbrtl (long double __x) __attribute__ ((__nothrow__));








extern long double ceill (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern long double __ceill (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern long double fabsl (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern long double __fabsl (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern long double floorl (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern long double __floorl (long double __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern long double fmodl (long double __x, long double __y) __attribute__ ((__nothrow__)); extern long double __fmodl (long double __x, long double __y) __attribute__ ((__nothrow__));




extern int __isinfl (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int __finitel (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern int isinfl (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern int finitel (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern long double dreml (long double __x, long double __y) __attribute__ ((__nothrow__)); extern long double __dreml (long double __x, long double __y) __attribute__ ((__nothrow__));



extern long double significandl (long double __x) __attribute__ ((__nothrow__)); extern long double __significandl (long double __x) __attribute__ ((__nothrow__));





extern long double copysignl (long double __x, long double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));

# 231 "/usr/include/bits/mathcalls.h" 3 4
extern int __isnanl (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));



extern int isnanl (long double __value) __attribute__ ((__nothrow__)) __attribute__ ((__const__));


extern long double j0l (long double) __attribute__ ((__nothrow__)); extern long double __j0l (long double) __attribute__ ((__nothrow__));
extern long double j1l (long double) __attribute__ ((__nothrow__)); extern long double __j1l (long double) __attribute__ ((__nothrow__));
extern long double jnl (int, long double) __attribute__ ((__nothrow__)); extern long double __jnl (int, long double) __attribute__ ((__nothrow__));
extern long double y0l (long double) __attribute__ ((__nothrow__)); extern long double __y0l (long double) __attribute__ ((__nothrow__));
extern long double y1l (long double) __attribute__ ((__nothrow__)); extern long double __y1l (long double) __attribute__ ((__nothrow__));
extern long double ynl (int, long double) __attribute__ ((__nothrow__)); extern long double __ynl (int, long double) __attribute__ ((__nothrow__));






extern long double erfl (long double) __attribute__ ((__nothrow__)); extern long double __erfl (long double) __attribute__ ((__nothrow__));
extern long double erfcl (long double) __attribute__ ((__nothrow__)); extern long double __erfcl (long double) __attribute__ ((__nothrow__));
extern long double lgammal (long double) __attribute__ ((__nothrow__)); extern long double __lgammal (long double) __attribute__ ((__nothrow__));

# 265 "/usr/include/bits/mathcalls.h" 3 4
extern long double gammal (long double) __attribute__ ((__nothrow__)); extern long double __gammal (long double) __attribute__ ((__nothrow__));






extern long double lgammal_r (long double, int *__signgamp) __attribute__ ((__nothrow__)); extern long double __lgammal_r (long double, int *__signgamp) __attribute__ ((__nothrow__));







extern long double rintl (long double __x) __attribute__ ((__nothrow__)); extern long double __rintl (long double __x) __attribute__ ((__nothrow__));


extern long double nextafterl (long double __x, long double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) __attribute__ ((__nothrow__)) __attribute__ ((__const__));





extern long double remainderl (long double __x, long double __y) __attribute__ ((__nothrow__)); extern long double __remainderl (long double __x, long double __y) __attribute__ ((__nothrow__));



extern long double scalbnl (long double __x, int __n) __attribute__ ((__nothrow__)); extern long double __scalbnl (long double __x, int __n) __attribute__ ((__nothrow__));



extern int ilogbl (long double __x) __attribute__ ((__nothrow__)); extern int __ilogbl (long double __x) __attribute__ ((__nothrow__));
# 115 "/usr/include/math.h" 2 3 4
# 130 "/usr/include/math.h" 3 4
extern int signgam;
# 257 "/usr/include/math.h" 3 4
typedef enum
{
  _IEEE_ = -1,
  _SVID_,
  _XOPEN_,
  _POSIX_,
  _ISOC_
} _LIB_VERSION_TYPE;




extern _LIB_VERSION_TYPE _LIB_VERSION;
# 282 "/usr/include/math.h" 3 4
struct exception

  {
    int type;
    char *name;
    double arg1;
    double arg2;
    double retval;
  };




extern int matherr (struct exception *__exc);
# 382 "/usr/include/math.h" 3 4
# 1 "/usr/include/bits/mathinline.h" 1 3 4
# 291 "/usr/include/bits/mathinline.h" 3 4
extern __inline double __sgn (double) __attribute__ ((__nothrow__)); extern __inline double __attribute__ ((__nothrow__)) __sgn (double __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } extern __inline float __sgnf (float) __attribute__ ((__nothrow__)); extern __inline float __attribute__ ((__nothrow__)) __sgnf (float __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); } extern __inline long double __sgnl (long double) __attribute__ ((__nothrow__)); extern __inline long double __attribute__ ((__nothrow__)) __sgnl (long double __x) { return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0); }
# 433 "/usr/include/bits/mathinline.h" 3 4
extern __inline long double __attribute__ ((__nothrow__)) __atan2l (long double __y, long double __x) { return __builtin_atan2l (__y, __x); }
# 473 "/usr/include/bits/mathinline.h" 3 4
extern __inline double __attribute__ ((__nothrow__)) fabs (double __x) { return __builtin_fabs (__x); }

extern __inline float __attribute__ ((__nothrow__)) fabsf (float __x) { return __builtin_fabsf (__x); }
extern __inline long double __attribute__ ((__nothrow__)) fabsl (long double __x) { return __builtin_fabsl (__x); }

extern __inline long double __attribute__ ((__nothrow__)) __fabsl (long double __x) { return __builtin_fabsl (__x); }
# 506 "/usr/include/bits/mathinline.h" 3 4
extern __inline long double __sgn1l (long double) __attribute__ ((__nothrow__)); extern __inline long double __attribute__ ((__nothrow__)) __sgn1l (long double __x) { __extension__ union { long double __xld; unsigned int __xi[3]; } __n = { __xld: __x }; __n.__xi[2] = (__n.__xi[2] & 0x8000) | 0x3fff; __n.__xi[1] = 0x80000000; __n.__xi[0] = 0; return __n.__xld; }
# 530 "/usr/include/bits/mathinline.h" 3 4
extern __inline double __attribute__ ((__nothrow__)) floor (double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline float __attribute__ ((__nothrow__)) floorf (float __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline long double __attribute__ ((__nothrow__)) floorl (long double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0400; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; }
# 541 "/usr/include/bits/mathinline.h" 3 4
extern __inline double __attribute__ ((__nothrow__)) ceil (double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline float __attribute__ ((__nothrow__)) ceilf (float __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; } extern __inline long double __attribute__ ((__nothrow__)) ceill (long double __x) { register long double __value; __volatile unsigned short int __cw; __volatile unsigned short int __cwtmp; __asm __volatile ("fnstcw %0" : "=m" (__cw)); __cwtmp = (__cw & 0xf3ff) | 0x0800; __asm __volatile ("fldcw %0" : : "m" (__cwtmp)); __asm __volatile ("frndint" : "=t" (__value) : "0" (__x)); __asm __volatile ("fldcw %0" : : "m" (__cw)); return __value; }
# 713 "/usr/include/bits/mathinline.h" 3 4
extern __inline int
__attribute__ ((__nothrow__)) __finite (double __x)
{
  return (__extension__
   (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1]
      | 0x800fffffu) + 1) >> 31));
}
# 383 "/usr/include/math.h" 2 3 4
# 438 "/usr/include/math.h" 3 4

# 29 "render.h" 2
# 1 "/usr/include/stdio.h" 1 3 4
# 30 "/usr/include/stdio.h" 3 4




# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 35 "/usr/include/stdio.h" 2 3 4
# 44 "/usr/include/stdio.h" 3 4


typedef struct _IO_FILE FILE;





# 62 "/usr/include/stdio.h" 3 4
typedef struct _IO_FILE __FILE;
# 72 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/libio.h" 1 3 4
# 32 "/usr/include/libio.h" 3 4
# 1 "/usr/include/_G_config.h" 1 3 4
# 14 "/usr/include/_G_config.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 326 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 3 4
typedef long int wchar_t;
# 355 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 3 4
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3 4
# 24 "/usr/include/_G_config.h" 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 48 "/usr/include/wchar.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 49 "/usr/include/wchar.h" 2 3 4

# 1 "/usr/include/bits/wchar.h" 1 3 4
# 51 "/usr/include/wchar.h" 2 3 4
# 76 "/usr/include/wchar.h" 3 4
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3 4

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3 4
# 1 "/usr/include/gconv.h" 1 3 4
# 28 "/usr/include/gconv.h" 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 48 "/usr/include/wchar.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 49 "/usr/include/wchar.h" 2 3 4
# 29 "/usr/include/gconv.h" 2 3 4


# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 32 "/usr/include/gconv.h" 2 3 4





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
       __const unsigned char **, __const unsigned char *,
       unsigned char **, size_t *, int, int);


typedef wint_t (*__gconv_btowc_fct) (struct __gconv_step *, unsigned char);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
      struct __gconv_step_data *, void *,
      __const unsigned char *,
      __const unsigned char **,
      __const unsigned char *, unsigned char **,
      size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
       __const unsigned char *,
       unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
     size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_btowc_fct __btowc_fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3 4
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 33 "/usr/include/libio.h" 2 3 4
# 53 "/usr/include/libio.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stdarg.h" 1 3 4
# 43 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 54 "/usr/include/libio.h" 2 3 4
# 166 "/usr/include/libio.h" 3 4
struct _IO_jump_t; struct _IO_FILE;
# 176 "/usr/include/libio.h" 3 4
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 199 "/usr/include/libio.h" 3 4
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 267 "/usr/include/libio.h" 3 4
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;



  int _flags2;

  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 315 "/usr/include/libio.h" 3 4
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 354 "/usr/include/libio.h" 3 4
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
     size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);
# 406 "/usr/include/libio.h" 3 4
extern int __underflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern int __uflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern int __overflow (_IO_FILE *, int) __attribute__ ((__nothrow__));
extern wint_t __wunderflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern wint_t __wuflow (_IO_FILE *) __attribute__ ((__nothrow__));
extern wint_t __woverflow (_IO_FILE *, wint_t) __attribute__ ((__nothrow__));
# 444 "/usr/include/libio.h" 3 4
extern int _IO_getc (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_putc (int __c, _IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));

extern int _IO_peekc_locked (_IO_FILE *__fp) __attribute__ ((__nothrow__));





extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
# 474 "/usr/include/libio.h" 3 4
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
   __gnuc_va_list, int *__restrict) __attribute__ ((__nothrow__));
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
    __gnuc_va_list) __attribute__ ((__nothrow__));
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) __attribute__ ((__nothrow__));
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) __attribute__ ((__nothrow__));

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) __attribute__ ((__nothrow__));
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) __attribute__ ((__nothrow__));

extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
# 73 "/usr/include/stdio.h" 2 3 4
# 86 "/usr/include/stdio.h" 3 4


typedef _G_fpos_t fpos_t;




# 138 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/bits/stdio_lim.h" 1 3 4
# 139 "/usr/include/stdio.h" 2 3 4



extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;









extern int remove (__const char *__filename) __attribute__ ((__nothrow__));

extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));









extern FILE *tmpfile (void);
# 180 "/usr/include/stdio.h" 3 4
extern char *tmpnam (char *__s) __attribute__ ((__nothrow__));





extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__));
# 198 "/usr/include/stdio.h" 3 4
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));








extern int fclose (FILE *__stream);




extern int fflush (FILE *__stream);

# 223 "/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 237 "/usr/include/stdio.h" 3 4






extern FILE *fopen (__const char *__restrict __filename,
      __const char *__restrict __modes);




extern FILE *freopen (__const char *__restrict __filename,
        __const char *__restrict __modes,
        FILE *__restrict __stream);
# 264 "/usr/include/stdio.h" 3 4

# 275 "/usr/include/stdio.h" 3 4
extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__));
# 296 "/usr/include/stdio.h" 3 4



extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
      int __modes, size_t __n) __attribute__ ((__nothrow__));





extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
         size_t __size) __attribute__ ((__nothrow__));


extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));








extern int fprintf (FILE *__restrict __stream,
      __const char *__restrict __format, ...);




extern int printf (__const char *__restrict __format, ...);

extern int sprintf (char *__restrict __s,
      __const char *__restrict __format, ...) __attribute__ ((__nothrow__));





extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg);




extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
       __gnuc_va_list __arg) __attribute__ ((__nothrow__));





extern int snprintf (char *__restrict __s, size_t __maxlen,
       __const char *__restrict __format, ...)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
        __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));

# 390 "/usr/include/stdio.h" 3 4





extern int fscanf (FILE *__restrict __stream,
     __const char *__restrict __format, ...);




extern int scanf (__const char *__restrict __format, ...);

extern int sscanf (__const char *__restrict __s,
     __const char *__restrict __format, ...) __attribute__ ((__nothrow__));

# 432 "/usr/include/stdio.h" 3 4





extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);





extern int getchar (void);

# 456 "/usr/include/stdio.h" 3 4
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 467 "/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);











extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);





extern int putchar (int __c);

# 500 "/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);







extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);






extern int getw (FILE *__stream);


extern int putw (int __w, FILE *__stream);








extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream);






extern char *gets (char *__s);

# 580 "/usr/include/stdio.h" 3 4





extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);





extern int puts (__const char *__s);






extern int ungetc (int __c, FILE *__stream);






extern size_t fread (void *__restrict __ptr, size_t __size,
       size_t __n, FILE *__restrict __stream);




extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
        size_t __n, FILE *__restrict __s);

# 633 "/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
         size_t __n, FILE *__restrict __stream);
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
          size_t __n, FILE *__restrict __stream);








extern int fseek (FILE *__stream, long int __off, int __whence);




extern long int ftell (FILE *__stream);




extern void rewind (FILE *__stream);

# 688 "/usr/include/stdio.h" 3 4






extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);




extern int fsetpos (FILE *__stream, __const fpos_t *__pos);
# 711 "/usr/include/stdio.h" 3 4

# 720 "/usr/include/stdio.h" 3 4


extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));

extern int feof (FILE *__stream) __attribute__ ((__nothrow__));

extern int ferror (FILE *__stream) __attribute__ ((__nothrow__));




extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__));








extern void perror (__const char *__s);






# 1 "/usr/include/bits/sys_errlist.h" 1 3 4
# 27 "/usr/include/bits/sys_errlist.h" 3 4
extern int sys_nerr;
extern __const char *__const sys_errlist[];
# 750 "/usr/include/stdio.h" 2 3 4




extern int fileno (FILE *__stream) __attribute__ ((__nothrow__));




extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
# 769 "/usr/include/stdio.h" 3 4
extern FILE *popen (__const char *__command, __const char *__modes);





extern int pclose (FILE *__stream);





extern char *ctermid (char *__s) __attribute__ ((__nothrow__));
# 809 "/usr/include/stdio.h" 3 4
extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));



extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__));


extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
# 830 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/bits/stdio.h" 1 3 4
# 33 "/usr/include/bits/stdio.h" 3 4
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return (__builtin_expect ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end, 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return (__builtin_expect ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end, 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect ((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end, 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (__builtin_expect ((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end, 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (__builtin_expect ((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end, 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}
# 111 "/usr/include/bits/stdio.h" 3 4
extern __inline int
__attribute__ ((__nothrow__)) feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
__attribute__ ((__nothrow__)) ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 831 "/usr/include/stdio.h" 2 3 4






# 30 "render.h" 2

# 1 "/usr/include/sys/types.h" 1 3 4
# 29 "/usr/include/sys/types.h" 3 4






typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;




typedef __loff_t loff_t;



typedef __ino_t ino_t;
# 62 "/usr/include/sys/types.h" 3 4
typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;
# 100 "/usr/include/sys/types.h" 3 4
typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;





typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;





typedef __key_t key_t;
# 133 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 74 "/usr/include/time.h" 3 4


typedef __time_t time_t;



# 92 "/usr/include/time.h" 3 4
typedef __clockid_t clockid_t;
# 104 "/usr/include/time.h" 3 4
typedef __timer_t timer_t;
# 134 "/usr/include/sys/types.h" 2 3 4
# 147 "/usr/include/sys/types.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 148 "/usr/include/sys/types.h" 2 3 4



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 191 "/usr/include/sys/types.h" 3 4
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 213 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 37 "/usr/include/endian.h" 3 4
# 1 "/usr/include/bits/endian.h" 1 3 4
# 38 "/usr/include/endian.h" 2 3 4
# 214 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/select.h" 1 3 4
# 31 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/bits/select.h" 1 3 4
# 32 "/usr/include/sys/select.h" 2 3 4


# 1 "/usr/include/bits/sigset.h" 1 3 4
# 35 "/usr/include/sys/select.h" 2 3 4
# 44 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 45 "/usr/include/sys/select.h" 2 3 4

# 1 "/usr/include/bits/time.h" 1 3 4
# 69 "/usr/include/bits/time.h" 3 4
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 47 "/usr/include/sys/select.h" 2 3 4


typedef __suseconds_t suseconds_t;





typedef long int __fd_mask;
# 67 "/usr/include/sys/select.h" 3 4
typedef struct
  {






    __fd_mask __fds_bits[1024 / (8 * sizeof (__fd_mask))];


  } fd_set;






typedef __fd_mask fd_mask;
# 99 "/usr/include/sys/select.h" 3 4

# 109 "/usr/include/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
     fd_set *__restrict __writefds,
     fd_set *__restrict __exceptfds,
     struct timeval *__restrict __timeout);
# 128 "/usr/include/sys/select.h" 3 4

# 217 "/usr/include/sys/types.h" 2 3 4


# 1 "/usr/include/sys/sysmacros.h" 1 3 4
# 29 "/usr/include/sys/sysmacros.h" 3 4
__extension__
extern __inline unsigned int gnu_dev_major (unsigned long long int __dev)
     __attribute__ ((__nothrow__));
__extension__
extern __inline unsigned int gnu_dev_minor (unsigned long long int __dev)
     __attribute__ ((__nothrow__));
__extension__
extern __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
       unsigned int __minor)
     __attribute__ ((__nothrow__));


__extension__ extern __inline unsigned int
__attribute__ ((__nothrow__)) gnu_dev_major (unsigned long long int __dev)
{
  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
}

__extension__ extern __inline unsigned int
__attribute__ ((__nothrow__)) gnu_dev_minor (unsigned long long int __dev)
{
  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
}

__extension__ extern __inline unsigned long long int
__attribute__ ((__nothrow__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
{
  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
   | (((unsigned long long int) (__minor & ~0xff)) << 12)
   | (((unsigned long long int) (__major & ~0xfff)) << 32));
}
# 220 "/usr/include/sys/types.h" 2 3 4
# 231 "/usr/include/sys/types.h" 3 4
typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 266 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
# 267 "/usr/include/sys/types.h" 2 3 4



# 32 "render.h" 2


# 1 "/usr/include/stdlib.h" 1 3 4
# 33 "/usr/include/stdlib.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 34 "/usr/include/stdlib.h" 2 3 4


# 96 "/usr/include/stdlib.h" 3 4


typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;



# 140 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__));




extern double atof (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

extern int atoi (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

extern long int atol (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





__extension__ extern long long int atoll (__const char *__nptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));





extern double strtod (__const char *__restrict __nptr,
        char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

# 181 "/usr/include/stdlib.h" 3 4


extern long int strtol (__const char *__restrict __nptr,
   char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

extern unsigned long int strtoul (__const char *__restrict __nptr,
      char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));




__extension__
extern long long int strtoq (__const char *__restrict __nptr,
        char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
           char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





__extension__
extern long long int strtoll (__const char *__restrict __nptr,
         char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
     char **__restrict __endptr, int __base)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

# 277 "/usr/include/stdlib.h" 3 4
extern double __strtod_internal (__const char *__restrict __nptr,
     char **__restrict __endptr, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern float __strtof_internal (__const char *__restrict __nptr,
    char **__restrict __endptr, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern long double __strtold_internal (__const char *__restrict __nptr,
           char **__restrict __endptr,
           int __group) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));

extern long int __strtol_internal (__const char *__restrict __nptr,
       char **__restrict __endptr,
       int __base, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
          char **__restrict __endptr,
          int __base, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
      char **__restrict __endptr,
      int __base, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



__extension__
extern unsigned long long int __strtoull_internal (__const char *
         __restrict __nptr,
         char **__restrict __endptr,
         int __base, int __group)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));








extern __inline double
__attribute__ ((__nothrow__)) strtod (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
__attribute__ ((__nothrow__)) strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
__attribute__ ((__nothrow__)) strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}

# 359 "/usr/include/stdlib.h" 3 4
__extension__ extern __inline long long int
__attribute__ ((__nothrow__)) strtoq (__const char *__restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
__attribute__ ((__nothrow__)) strtouq (__const char *__restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}




__extension__ extern __inline long long int
__attribute__ ((__nothrow__)) strtoll (__const char *__restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
__attribute__ ((__nothrow__)) strtoull (__const char * __restrict __nptr, char **__restrict __endptr, int __base)

{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}




extern __inline double
__attribute__ ((__nothrow__)) atof (__const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
extern __inline int
__attribute__ ((__nothrow__)) atoi (__const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline long int
__attribute__ ((__nothrow__)) atol (__const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}




__extension__ extern __inline long long int
__attribute__ ((__nothrow__)) atoll (__const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}

# 424 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) __attribute__ ((__nothrow__));


extern long int a64l (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 440 "/usr/include/stdlib.h" 3 4
extern long int random (void) __attribute__ ((__nothrow__));


extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__));





extern char *initstate (unsigned int __seed, char *__statebuf,
   size_t __statelen) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));



extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
       int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern int srandom_r (unsigned int __seed, struct random_data *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
   size_t __statelen,
   struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));

extern int setstate_r (char *__restrict __statebuf,
         struct random_data *__restrict __buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));






extern int rand (void) __attribute__ ((__nothrow__));

extern void srand (unsigned int __seed) __attribute__ ((__nothrow__));




extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__));







extern double drand48 (void) __attribute__ ((__nothrow__));
extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern long int lrand48 (void) __attribute__ ((__nothrow__));
extern long int nrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern long int mrand48 (void) __attribute__ ((__nothrow__));
extern long int jrand48 (unsigned short int __xsubi[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern void srand48 (long int __seedval) __attribute__ ((__nothrow__));
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int lrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int mrand48_r (struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
        struct drand48_data *__restrict __buffer,
        long int *__restrict __result)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));

extern int seed48_r (unsigned short int __seed16v[3],
       struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern int lcong48_r (unsigned short int __param[7],
        struct drand48_data *__buffer)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));









extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));







extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));

extern void free (void *__ptr) __attribute__ ((__nothrow__));




extern void cfree (void *__ptr) __attribute__ ((__nothrow__));



# 1 "/usr/include/alloca.h" 1 3 4
# 25 "/usr/include/alloca.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 26 "/usr/include/alloca.h" 2 3 4







extern void *alloca (size_t __size) __attribute__ ((__nothrow__));






# 607 "/usr/include/stdlib.h" 2 3 4




extern void *valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
# 620 "/usr/include/stdlib.h" 3 4


extern void abort (void) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern void exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));

# 652 "/usr/include/stdlib.h" 3 4


extern char *getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));




extern char *__secure_getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





extern int putenv (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));





extern int setenv (__const char *__name, __const char *__value, int __replace)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int unsetenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






extern int clearenv (void) __attribute__ ((__nothrow__));
# 691 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
# 702 "/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1)));
# 721 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));








extern int system (__const char *__command);

# 749 "/usr/include/stdlib.h" 3 4
extern char *realpath (__const char *__restrict __name,
         char *__restrict __resolved) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






typedef int (*__compar_fn_t) (__const void *, __const void *);









extern void *bsearch (__const void *__key, __const void *__base,
        size_t __nmemb, size_t __size, __compar_fn_t __compar)
     __attribute__ ((__nonnull__ (1, 2, 5)));



extern void qsort (void *__base, size_t __nmemb, size_t __size,
     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));



extern int abs (int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__));












extern div_t div (int __numer, int __denom)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__nothrow__)) __attribute__ ((__const__));

# 814 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));




extern char *gcvt (double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3)));




extern char *qecvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
extern char *qfcvt (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4)));
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3)));




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
     int *__restrict __sign, char *__restrict __buf,
     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));

extern int qecvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
      int *__restrict __decpt, int *__restrict __sign,
      char *__restrict __buf, size_t __len)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));







extern int mblen (__const char *__s, size_t __n) __attribute__ ((__nothrow__));


extern int mbtowc (wchar_t *__restrict __pwc,
     __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));


extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__));



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
   __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));

extern size_t wcstombs (char *__restrict __s,
   __const wchar_t *__restrict __pwcs, size_t __n)
     __attribute__ ((__nothrow__));








extern int rpmatch (__const char *__response) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
# 954 "/usr/include/stdlib.h" 3 4
extern int getloadavg (double __loadavg[], int __nelem)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));






# 35 "render.h" 2


# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 152 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 3 4
typedef int ptrdiff_t;
# 38 "render.h" 2


# 1 "/usr/include/strings.h" 1 3 4
# 29 "/usr/include/strings.h" 3 4
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 30 "/usr/include/strings.h" 2 3 4




extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__));


extern void bcopy (__const void *__src, void *__dest, size_t __n) __attribute__ ((__nothrow__));


extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__));



extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((const));


extern char *index (__const char *__s, int __c) __attribute__ ((__nothrow__)) __attribute__ ((__pure__));


extern char *rindex (__const char *__s, int __c) __attribute__ ((__nothrow__)) __attribute__ ((__pure__));


extern int strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__));


# 41 "render.h" 2


# 1 "/usr/include/string.h" 1 3 4
# 28 "/usr/include/string.h" 3 4





# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stddef.h" 1 3 4
# 34 "/usr/include/string.h" 2 3 4




extern void *memcpy (void *__restrict __dest,
       __const void *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern void *memmove (void *__dest, __const void *__src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));






extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
        int __c, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));





extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern void *memchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

# 82 "/usr/include/string.h" 3 4


extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncpy (char *__restrict __dest,
        __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
        size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strcoll (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern size_t strxfrm (char *__restrict __dest,
         __const char *__restrict __src, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));

# 130 "/usr/include/string.h" 3 4
extern char *strdup (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
# 165 "/usr/include/string.h" 3 4


extern char *strchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

extern char *strrchr (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

# 181 "/usr/include/string.h" 3 4



extern size_t strcspn (__const char *__s, __const char *__reject)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern size_t strspn (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strpbrk (__const char *__s, __const char *__accept)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));

extern char *strstr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));



extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));




extern char *__strtok_r (char *__restrict __s,
    __const char *__restrict __delim,
    char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
         char **__restrict __save_ptr)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
# 240 "/usr/include/string.h" 3 4


extern size_t strlen (__const char *__s)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));

# 254 "/usr/include/string.h" 3 4


extern char *strerror (int __errnum) __attribute__ ((__nothrow__));

# 281 "/usr/include/string.h" 3 4
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));





extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));



extern void bcopy (__const void *__src, void *__dest, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));


extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern char *index (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));


extern char *rindex (__const char *__s, int __c)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));



extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
# 325 "/usr/include/string.h" 3 4
extern int strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 348 "/usr/include/string.h" 3 4
extern char *strsep (char **__restrict __stringp,
       __const char *__restrict __delim)
     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
# 414 "/usr/include/string.h" 3 4
# 1 "/usr/include/bits/string.h" 1 3 4
# 415 "/usr/include/string.h" 2 3 4


# 1 "/usr/include/bits/string2.h" 1 3 4
# 394 "/usr/include/bits/string2.h" 3 4
extern void *__rawmemchr (const void *__s, int __c);
# 969 "/usr/include/bits/string2.h" 3 4
extern __inline size_t __strcspn_c1 (__const char *__s, int __reject);
extern __inline size_t
__strcspn_c1 (__const char *__s, int __reject)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c2 (__const char *__s, int __reject1,
         int __reject2);
extern __inline size_t
__strcspn_c2 (__const char *__s, int __reject1, int __reject2)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
  && __s[__result] != __reject2)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c3 (__const char *__s, int __reject1,
         int __reject2, int __reject3);
extern __inline size_t
__strcspn_c3 (__const char *__s, int __reject1, int __reject2,
       int __reject3)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
  && __s[__result] != __reject2 && __s[__result] != __reject3)
    ++__result;
  return __result;
}
# 1045 "/usr/include/bits/string2.h" 3 4
extern __inline size_t __strspn_c1 (__const char *__s, int __accept);
extern __inline size_t
__strspn_c1 (__const char *__s, int __accept)
{
  register size_t __result = 0;

  while (__s[__result] == __accept)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c2 (__const char *__s, int __accept1,
        int __accept2);
extern __inline size_t
__strspn_c2 (__const char *__s, int __accept1, int __accept2)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c3 (__const char *__s, int __accept1,
        int __accept2, int __accept3);
extern __inline size_t
__strspn_c3 (__const char *__s, int __accept1, int __accept2, int __accept3)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2
  || __s[__result] == __accept3)
    ++__result;
  return __result;
}
# 1121 "/usr/include/bits/string2.h" 3 4
extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
         int __accept2);
extern __inline char *
__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}

extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
         int __accept2, int __accept3);
extern __inline char *
__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
       int __accept3)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
  && *__s != __accept3)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
# 1173 "/usr/include/bits/string2.h" 3 4
extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
  char *__result;
  if (__s == ((void *)0))
    __s = *__nextp;
  while (*__s == __sep)
    ++__s;
  __result = ((void *)0);
  if (*__s != '\0')
    {
      __result = __s++;
      while (*__s != '\0')
 if (*__s++ == __sep)
   {
     __s[-1] = '\0';
     break;
   }
      *__nextp = __s;
    }
  return __result;
}
# 1205 "/usr/include/bits/string2.h" 3 4
extern char *__strsep_g (char **__stringp, __const char *__delim);
# 1223 "/usr/include/bits/string2.h" 3 4
extern __inline char *__strsep_1c (char **__s, char __reject);
extern __inline char *
__strsep_1c (char **__s, char __reject)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0) && (*__s = (__extension__ (__builtin_constant_p (__reject) && !__builtin_constant_p (__retval) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : __builtin_strchr (__retval, __reject)))) != ((void *)0))
    *(*__s)++ = '\0';
  return __retval;
}

extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
extern __inline char *
__strsep_2c (char **__s, char __reject1, char __reject2)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0))
    {
      register char *__cp = __retval;
      while (1)
 {
   if (*__cp == '\0')
     {
       __cp = ((void *)0);
   break;
     }
   if (*__cp == __reject1 || *__cp == __reject2)
     {
       *__cp++ = '\0';
       break;
     }
   ++__cp;
 }
      *__s = __cp;
    }
  return __retval;
}

extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
       char __reject3);
extern __inline char *
__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
{
  register char *__retval = *__s;
  if (__retval != ((void *)0))
    {
      register char *__cp = __retval;
      while (1)
 {
   if (*__cp == '\0')
     {
       __cp = ((void *)0);
   break;
     }
   if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
     {
       *__cp++ = '\0';
       break;
     }
   ++__cp;
 }
      *__s = __cp;
    }
  return __retval;
}
# 1304 "/usr/include/bits/string2.h" 3 4
extern char *__strdup (__const char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
# 1323 "/usr/include/bits/string2.h" 3 4
extern char *__strndup (__const char *__string, size_t __n)
     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
# 418 "/usr/include/string.h" 2 3 4
# 426 "/usr/include/string.h" 3 4

# 44 "render.h" 2


# 1 "macros.h" 1
# 47 "render.h" 2
# 1 "const.h" 1
# 48 "render.h" 2
# 1 "types.h" 1
# 13 "types.h"
# 1 "../../pathplan/pathplan.h" 1
# 15 "../../pathplan/pathplan.h"
# 1 "../../pathplan/pathgeom.h" 1
# 18 "../../pathplan/pathgeom.h"
typedef struct Pxy_t {
    double x, y;
} Pxy_t;

typedef struct Pxy_t Ppoint_t;
typedef struct Pxy_t Pvector_t;

typedef struct Ppoly_t {
    Ppoint_t *ps;
    int pn;
} Ppoly_t;

typedef Ppoly_t Ppolyline_t;

typedef struct Pedge_t {
    Ppoint_t a, b;
} Pedge_t;


typedef struct vconfig_s vconfig_t;
# 16 "../../pathplan/pathplan.h" 2
# 27 "../../pathplan/pathplan.h"
extern int Pshortestpath(Ppoly_t *boundary, Ppoint_t endpoints[2],
 Ppolyline_t *output_route);


extern int Proutespline (Pedge_t *barriers, int n_barriers,
 Ppolyline_t input_route, Pvector_t endpoint_slopes[2],
 Ppolyline_t *output_route);


extern int Ppolybarriers(Ppoly_t **polys, int npolys, Pedge_t **barriers, int *n_barriers);
# 14 "types.h" 2





typedef unsigned char boolean;

typedef int (*qsort_cmpf)(const void*, const void*);
typedef int (*bsearch_cmpf) (const void *, const void *);

typedef struct Agraph_t graph_t;
typedef struct Agnode_t node_t;
typedef struct Agedge_t edge_t;
typedef struct Agsym_t attrsym_t;

typedef struct GVC_s GVC_t;
typedef struct gvrender_engine_s gvrender_engine_t;

typedef struct htmllabel_t htmllabel_t;

typedef struct pointf {
 double x,y;
} pointf;

typedef struct inside_t {
 pointf *p;
 double *r;
 node_t *n;
 edge_t *e;
} inside_t;

typedef struct point {
 int x,y;
} point;

typedef struct box {
 point LL,UR;
} box;

typedef struct port {
 point p;
 double theta;
 box* bp;


 boolean constrained,defined;
 unsigned char order;
} port;

typedef struct {
  boolean (*swapEnds) (edge_t *e);
  boolean (*splineMerge)(node_t* n);
} splineInfo;

typedef struct pathend_t {
 box nb;
 point np;
 int sidemask;
 int boxn;
 box boxes[20];
} pathend_t;

typedef struct path {
 port start,end;
 point *ulpp, *urpp, *llpp, *lrpp;
 int nbox;
 box *boxes;
 void *data;
} path;

typedef struct bezier {
 point *list;
 int size;
 int sflag, eflag;
 point sp, ep;
} bezier;

typedef struct splines {
 bezier *list;
 int size;
} splines;


typedef struct bezierf {
 pointf *list;
 int size;
 int sflag, eflag;
 pointf sp, ep;
} bezierf;

typedef struct splinesf {
 bezierf *list;
 int size;
} splinesf;

typedef struct textline_t {
 char *str;
 char *xshow;
 double width;
 char just;
} textline_t;

typedef struct textlabel_t {
 char *text, *fontname,*fontcolor;
 double fontsize;
 pointf dimen;
 point p;
 pointf d;
 union {
  struct {
   textline_t *line;
   short nlines;
  } txt;
  htmllabel_t* html;
 } u;
 boolean set;
 boolean html;
} textlabel_t;

typedef struct polygon_t {
 int regular;
 int peripheries;
 int sides;
 double orientation;
 double distortion;
 double skew;
 int option;
 pointf *vertices;
} polygon_t;

typedef struct stroke_t {

 int nvertices;
 int flags;
 pointf *vertices;
} stroke_t;







typedef struct shape_t {
 int nstrokes;
 stroke_t *strokes;


} shape_t;

typedef struct shape_functions {
 void (*initfn)(node_t *);
 void (*freefn)(node_t *);
 port (*portfn)(node_t *, char *, char*);
 boolean (*insidefn)(inside_t *inside_context, pointf);
 int (*pboxfn)(node_t *n, edge_t *e, int, box *, int *);
 void (*codefn)(GVC_t *gvc, node_t *n);
} shape_functions;

typedef enum {SH_UNSET, SH_POLY, SH_RECORD, SH_POINT, SH_EPSF, SH_USER} shape_kind;

typedef struct shape_desc {
 char *name;
 shape_functions *fns;
 polygon_t *polygon;
 boolean usershape;
} shape_desc;



typedef struct codegen_t {
 void (*reset)(void);
 void (*begin_job)(FILE *ofp, graph_t *g, char **lib, char *user, char *info[], point pages);
 void (*end_job)(void);
 void (*begin_graph)(GVC_t *gvc, graph_t* g, box bb, point pb);
 void (*end_graph)(void);
 void (*begin_page)(graph_t *g, point page, double scale, int rot, point offset);
 void (*end_page)(void);
 void (*begin_layer)(char *layerName, int n, int nLayers);
 void (*end_layer)(void);
 void (*begin_cluster)(graph_t *g);
 void (*end_cluster)(void);
 void (*begin_nodes)(void);
 void (*end_nodes)(void);
 void (*begin_edges)(void);
 void (*end_edges)(void);
 void (*begin_node)(node_t *n);
 void (*end_node)(void);
 void (*begin_edge)(edge_t *e);
 void (*end_edge)(void);
 void (*begin_context)(void);
 void (*end_context)(void);
 void (*begin_anchor)(char *href, char *tooltip, char *target);
 void (*end_anchor)(void);
 void (*set_font)(char *fontname, double fontsize);
 void (*textline)(point p, textline_t *str);
 void (*set_pencolor)(char *name);
 void (*set_fillcolor)(char *name);
 void (*set_style)(char **s);
 void (*ellipse)(point p, int rx, int ry, int filled);
 void (*polygon)(point *A, int n, int filled);
 void (*beziercurve)(point *A, int n, int arrow_at_start, int arrow_at_end);
 void (*polyline)(point *A,int n);
 boolean bezier_has_arrows;
 void (*comment)(void* obj, attrsym_t* sym);
 void (*textsize)(void);
 void (*user_shape)(char *name, point *A, int sides, int filled);
 void (*usershapesize)(void);
} codegen_t;

typedef struct codegen_info_t {
  codegen_t *cg;
  char *name;
  int id;
    void *info;

} codegen_info_t;



typedef struct queue {
 node_t **store,**limit,**head,**tail;
} queue;

typedef struct adjmatrix_t {
 int nrows,ncols;
 char *data;
} adjmatrix_t;

typedef struct rank_t {
 int n;
 node_t **v;
 int an;
 node_t **av;
 int ht1,ht2;
 int pht1,pht2;
 boolean candidate;
 boolean valid;
 int cache_nc;
 adjmatrix_t *flat;
} rank_t;

typedef enum engine_e {DOT, NEATO, TWOPI, FDP, CIRCULAR} engine_t;
typedef enum {R_NONE = 0, R_VALUE, R_FILL, R_COMPRESS, R_AUTO, R_EXPAND} ratio_t;

typedef struct layout_t {
 double quantum,scale;
 double ratio;
 double dpi;
 point margin, page, size;
 boolean filled, landscape,centered;
 ratio_t ratio_kind;
 engine_t engine;
} layout_t;


typedef struct field_t {
 point size;
 box b;
 int n_flds;
 textlabel_t *lp;
 struct field_t **fld;
 int LR;
 char *id;
} field_t;

typedef struct hsbcolor_t {
 char *name;
 unsigned char h,s,b;
} hsbcolor_t;


typedef enum {HSV_DOUBLE, RGBA_BYTE, RGBA_WORD, CMYK_BYTE, RGBA_DOUBLE, COLOR_STRING, COLOR_INDEX} color_type_t;


typedef struct color_s {
 union {
  double RGBA[4];
  double HSV[3];
  unsigned char rgba[4];
  unsigned char cmyk[4];
  int rrggbbaa[4];
  char *string;
  int index;
 } u;
 color_type_t type;
} color_t;

typedef struct nlist_t {
      node_t **list;
      int size;
} nlist_t;

typedef struct elist {
      edge_t **list;
      int size;
} elist;






typedef struct Agraphinfo_t {

 layout_t *drawing;
    textlabel_t *label;
 box bb;
 point border[4];
 boolean has_labels,has_images,has_Latin1char;
 int rankdir;
 int ht1,ht2;
 unsigned short flags;
    void* alg;



 node_t **neato_nlist;
 int move;
 double **dist,**spring,**sum_t,***t;
 int ndim;



 int n_cluster;
 graph_t **clust;
 node_t *nlist;
    rank_t *rank;

    nlist_t comp;

    node_t *minset,*maxset;
    long n_nodes;

    short minrank,maxrank;


    boolean has_flat_edges;
    boolean showboxes;
 boolean cluster_was_collapsed;

    int nodesep,ranksep;
    node_t *ln,*rn;



    node_t *leader,**rankleader;
    boolean expanded;
    char installed;
    char set_type;
    char label_pos;
    boolean exact_ranksep;


} Agraphinfo_t;
# 418 "types.h"
typedef struct Agnodeinfo_t {
 shape_desc *shape;
 void *shape_info;
 point coord;
 double width,height;
 int ht,lw,rw;
 textlabel_t *label;
    void* alg;
 char state;
 boolean clustnode;


 short xsize,ysize;
 int id,heapindex,hops;
 double *pos,dist;
 boolean pinned;


    boolean showboxes,has_port;


    char node_type,mark,onstack;
    char ranktype,weight_class;
    node_t *next,*prev;
    elist in,out,flat_out,flat_in,other;
    graph_t *clust;


    int UF_size;
    node_t *UF_parent;
    node_t *inleaf,*outleaf;


    int rank,order;
    int mval;
    elist save_in,save_out;


    elist tree_in,tree_out;
    edge_t *par;
    int low,lim;
    int priority;

    double pad[1];


} Agnodeinfo_t;
# 518 "types.h"
typedef struct Agedgeinfo_t {
 splines *spl;
 port tail_port,head_port;
 textlabel_t *label,*head_label,*tail_label;
 char edge_type;
 char label_ontop;
 edge_t *to_orig;
    void* alg;


 double factor;
 double dist;
 Ppolyline_t path;


    boolean showboxes;
    boolean conc_opp_flag;
    short xpenalty;
    int weight;
    int cutvalue,tree_index;
    short count,minlen;
 edge_t *to_virt;


} Agedgeinfo_t;
# 49 "render.h" 2
# 1 "../../graph/graph.h" 1
# 22 "../../graph/graph.h"
# 1 "../../cdt/cdt.h" 1
# 23 "../../cdt/cdt.h"
# 1 "../../ast_common.h" 1




# 1 "../../config.h" 1
# 6 "../../ast_common.h" 2
# 155 "../../ast_common.h"
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stdarg.h" 1 3 4
# 105 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 156 "../../ast_common.h" 2
# 203 "../../ast_common.h"
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 1 3 4
# 204 "../../ast_common.h" 2
# 24 "../../cdt/cdt.h" 2






typedef struct _dtlink_s Dtlink_t;
typedef struct _dthold_s Dthold_t;
typedef struct _dtdisc_s Dtdisc_t;
typedef struct _dtmethod_s Dtmethod_t;
typedef struct _dtdata_s Dtdata_t;
typedef struct _dt_s Dt_t;
typedef struct _dt_s Dict_t;
typedef struct _dtstat_s Dtstat_t;
typedef void* (*Dtsearch_f)(Dt_t*,void*,int);
typedef void* (*Dtmake_f)(Dt_t*,void*,Dtdisc_t*);
typedef void (*Dtfree_f)(Dt_t*,void*,Dtdisc_t*);
typedef int (*Dtcompar_f)(Dt_t*,void*,void*,Dtdisc_t*);
typedef unsigned int (*Dthash_f)(Dt_t*,void*,Dtdisc_t*);
typedef void* (*Dtmemory_f)(Dt_t*,void*,size_t,Dtdisc_t*);
typedef int (*Dtevent_f)(Dt_t*,int,void*,Dtdisc_t*);

struct _dtlink_s
{ Dtlink_t* right;
 union
 { unsigned int _hash;
   Dtlink_t* _left;
 } hl;
};


struct _dthold_s
{ Dtlink_t hdr;
 void* obj;
};


struct _dtmethod_s
{ Dtsearch_f searchf;
 int type;
};


struct _dtdata_s
{ int type;
 Dtlink_t* here;
 union
 { Dtlink_t** _htab;
   Dtlink_t* _head;
 } hh;
 int ntab;
 int size;
 int loop;
};


struct _dtdisc_s
{ int key;
 int size;
 int link;
 Dtmake_f makef;
 Dtfree_f freef;
 Dtcompar_f comparf;
 Dthash_f hashf;
 Dtmemory_f memoryf;
 Dtevent_f eventf;
};


struct _dt_s
{ Dtsearch_f searchf;
 Dtdisc_t* disc;
 Dtdata_t* data;
 Dtmemory_f memoryf;
 Dtmethod_t* meth;
 int type;
 int nview;
 Dt_t* view;
 Dt_t* walk;
};


struct _dtstat_s
{ int dt_meth;
 int dt_size;
 int dt_n;
 int dt_max;
 int* dt_count;
};
# 149 "../../cdt/cdt.h"








extern Dtmethod_t* Dtset;
extern Dtmethod_t* Dtbag;
extern Dtmethod_t* Dtoset;
extern Dtmethod_t* Dtobag;
extern Dtmethod_t* Dtlist;
extern Dtmethod_t* Dtstack;
extern Dtmethod_t* Dtqueue;



extern Dtmethod_t* Dtorder;
extern Dtmethod_t* Dttree;
extern Dtmethod_t* Dthash;
extern Dtmethod_t _Dttree;
extern Dtmethod_t _Dthash;
extern Dtmethod_t _Dtlist;
extern Dtmethod_t _Dtqueue;
extern Dtmethod_t _Dtstack;













extern Dt_t* dtopen (Dtdisc_t*, Dtmethod_t*);
extern int dtclose (Dt_t*);
extern Dt_t* dtview (Dt_t*, Dt_t*);
extern Dtdisc_t* dtdisc (Dt_t* dt, Dtdisc_t*, int);
extern Dtmethod_t* dtmethod (Dt_t*, Dtmethod_t*);

extern Dtlink_t* dtflatten (Dt_t*);
extern Dtlink_t* dtextract (Dt_t*);
extern int dtrestore (Dt_t*, Dtlink_t*);

extern int dtwalk (Dt_t*, int(*)(Dt_t*,void*,void*), void*);

extern void* dtrenew (Dt_t*, void*);

extern int dtsize (Dt_t*);
extern int dtstat (Dt_t*, Dtstat_t*, int);
extern unsigned int dtstrhash (unsigned int, void*, int);



# 23 "../../graph/graph.h" 2
# 33 "../../graph/graph.h"
typedef struct Agraph_t Agraph_t;
typedef struct Agnode_t Agnode_t;
typedef struct Agedge_t Agedge_t;
typedef struct Agdict_t Agdict_t;
typedef struct Agsym_t Agsym_t;
typedef struct Agdata_t Agdata_t;
typedef struct Agproto_t Agproto_t;

typedef char * (*gets_f)(char *ubuf, int n, FILE *fp);
# 58 "../../graph/graph.h"
struct Agraph_t {
 int tag : 4;
 int kind : 4;
 int handle: 24;
 char **attr;
 char *name;
 Agdata_t *univ;
 Dict_t *nodes,*inedges,*outedges;
 Agraph_t *root;
 Agnode_t *meta_node;
 Agproto_t *proto;
 Agraphinfo_t u;
};

struct Agnode_t {
 int tag : 4;
 int pad : 4;
 int handle: 24;
 char **attr;
 char *name;
 int id;
 Agraph_t *graph;
 Agnodeinfo_t u;
};

struct Agedge_t {
 int tag : 4;
 int printkey : 4;
 int handle: 24;
 char **attr;
 Agnode_t *head,*tail;
 int id;
 Agedgeinfo_t u;
};

struct Agdata_t {
 Dict_t *node_dict;
 Agdict_t *nodeattr;
 Agdict_t *edgeattr;
 Agdict_t *globattr;
 int max_node_id, max_edge_id;
};

struct Agsym_t {
 char *name,*value;
 int index;
 unsigned char printed;
 unsigned char fixed;
};

struct Agdict_t {
 char *name;
 Dict_t *dict;
 Agsym_t **list;
};

struct Agproto_t {
 Agnode_t *n;
 Agedge_t *e;
 Agproto_t *prev;
};
# 130 "../../graph/graph.h"
extern char *agstrcanon(char *, char *);
extern int aghtmlstr (char* s);
extern char *agget(void*, char *);
extern char *agxget(void*, int);
extern int agset(void*, char *, char *);
extern int agxset(void*, int, char *);
extern int agindex(void*, char *);

extern void aginitlib(int, int, int);
extern Agraph_t *agopen(char *, int);
extern Agraph_t *agsubg(Agraph_t *, char *);
extern Agraph_t *agfindsubg(Agraph_t *, char *);
extern void agclose(Agraph_t *);
extern Agraph_t *agread(FILE *);
extern Agraph_t *agread_usergets(FILE *, gets_f);
extern void agreadline(int);
extern void agsetfile(char*);
extern Agraph_t *agmemread(char *);
extern int agwrite(Agraph_t *, FILE *);
extern int agerrors(void);
extern Agraph_t *agprotograph();
extern Agraph_t *agusergraph(Agnode_t *);
extern int agnnodes(Agraph_t *);
extern int agnedges(Agraph_t *);

extern void aginsert(Agraph_t *, void*);
extern void agdelete(Agraph_t *, void*);
extern int agcontains(Agraph_t *, void*);

extern Agnode_t *agnode(Agraph_t *, char *);
extern Agsym_t *agnodeattr(Agraph_t *, char *, char *);
extern Agnode_t *agfindnode(Agraph_t *, char *);
extern Agnode_t *agfstnode(Agraph_t *);
extern Agnode_t *agnxtnode(Agraph_t *, Agnode_t *);
extern Agnode_t *aglstnode(Agraph_t *);
extern Agnode_t *agprvnode(Agraph_t *, Agnode_t *);

extern Agedge_t *agedge(Agraph_t *, Agnode_t *, Agnode_t *);
extern Agsym_t *agedgeattr(Agraph_t *, char *, char *);
extern Agedge_t *agfindedge(Agraph_t *, Agnode_t *, Agnode_t *);
extern Agedge_t *agfstedge(Agraph_t *, Agnode_t *);
extern Agedge_t *agnxtedge(Agraph_t *, Agedge_t *, Agnode_t *);
extern Agedge_t *agfstin(Agraph_t *, Agnode_t *);
extern Agedge_t *agnxtin(Agraph_t *, Agedge_t *);
extern Agedge_t *agfstout(Agraph_t *, Agnode_t *);
extern Agedge_t *agnxtout(Agraph_t *, Agedge_t *);

extern Agsym_t *agraphattr(Agraph_t *, char *, char *);
extern Agsym_t *agnodeattr(Agraph_t *, char *, char *);
extern Agsym_t *agedgeattr(Agraph_t *, char *, char *);
extern Agsym_t *agfindattr(void*, char *);

typedef enum {AGWARN, AGERR, AGMAX, AGPREV} agerrlevel_t;
extern agerrlevel_t agerrno;
extern void agseterr (agerrlevel_t);
extern char* aglasterr ();
extern int agerr (agerrlevel_t level, char* fmt, ...);
extern void agerrorf (char* fmt, ...);
extern void agwarningf (char* fmt, ...);

typedef enum {AGNODE = 1, AGEDGE, AGGRAPH } agobjkind_t;
# 50 "render.h" 2
# 1 "globals.h" 1
# 47 "globals.h"
extern char *Version;
extern char **Lib;
extern char **Files;
extern char **Lib;
extern char *CmdName;
extern char* specificFlags;
extern char* specificItems;
extern char *Gvfilepath;
extern int y_invert;


extern int Output_lang;
extern FILE *Output_file;
extern int Obj;


extern boolean Verbose,Reduce,UseRankdir;
extern char *HTTPServerEnVar;
extern char *Output_file_name;
extern int graphviz_errors;
extern int Nop;
extern double PSinputscale;
extern int Syntax_errors;
extern int Show_boxes;
extern int CL_type;
extern boolean Concentrate;
extern double Epsilon;
extern double Nodesep;
extern double Nodefactor;
extern int MaxIter;
extern int Ndim;
extern int State;
extern double Initial_dist;
extern double Damping;
extern char* BaseLineStyle[];

extern codegen_t FIG_CodeGen, HPGL_CodeGen,
 MAP_CodeGen, MIF_CodeGen,
 XDot_CodeGen, MP_CodeGen, PIC_CodeGen, PS_CodeGen,
 DIA_CodeGen, SVG_CodeGen, VRML_CodeGen, VTX_CodeGen;


extern codegen_t GD_CodeGen, memGD_CodeGen;





extern attrsym_t
  *N_height, *N_width, *N_shape, *N_color, *N_fillcolor,
  *N_fontsize, *N_fontname, *N_fontcolor,
  *N_label, *N_nojustify, *N_style, *N_showboxes,
  *N_sides,*N_peripheries,*N_orientation,
  *N_skew,*N_distortion,*N_fixed,*N_layer,
  *N_group,*N_comment,*N_vertices,*N_z;

extern attrsym_t *E_weight, *E_minlen, *E_color,
     *E_fontsize, *E_fontname, *E_fontcolor,
     *E_label, *E_dir, *E_style, *E_decorate,
     *E_showboxes,*E_arrowsz,*E_constr,*E_layer,
     *E_comment,*E_label_float;

extern attrsym_t *E_samehead, *E_sametail,
     *E_arrowhead, *E_arrowtail,
     *E_headlabel, *E_taillabel,
     *E_labelfontsize, *E_labelfontname, *E_labelfontcolor,
     *E_labeldistance, *E_labelangle;


extern attrsym_t *E_tailclip, *E_headclip;
# 51 "render.h" 2
# 1 "renderprocs.h" 1
# 17 "renderprocs.h"
typedef void (*nodesizefn_t)(Agnode_t*, boolean);

extern void add_box(path*, box);
extern point add_points(point, point);
extern void arrow_flags (Agedge_t *e, int *sflag, int *eflag);
extern void arrow_gen (GVC_t *gvc, point p, point u, double scale, int flag);
extern double arrow_length (edge_t* e, int flag);
extern int arrowEndClip (inside_t *inside_context, point* ps, int startp, int endp, bezier* spl, int eflag);
extern int arrowStartClip (inside_t *inside_context, point* ps, int startp, int endp, bezier* spl, int sflag);
extern void attach_attrs(Agraph_t *);
extern void beginpath(path*, Agedge_t *, int, pathend_t *, boolean);
extern pointf Bezier(pointf *, int, double, pointf *, pointf *);
extern void bezier_clip (inside_t *inside_context, boolean (*insidefn)(inside_t *inside_context, pointf p), pointf* sp, boolean left_inside);
extern shape_desc * bind_shape(char* name, node_t*);
extern box boxof(int, int, int, int);
extern void cat_libfile(FILE *, char **, char **);
extern void clip_and_install (edge_t*, edge_t*,point*, int, splineInfo*);
extern int clust_in_layer(Agraph_t *);
extern char* canontoken(char *str);
extern void colorxlate(char *str, color_t *color, color_type_t target_type);
extern void common_init_node(node_t *n);
extern int common_init_edge(edge_t *e);
extern void compute_bb(Agraph_t *);
extern void config_codegen_builtins (GVC_t *gvc);
extern point coord(node_t *n);
extern pointf cvt2ptf(point);
extern point cvt2pt(pointf);
extern Agnode_t *dequeue(queue *);
extern void do_graph_label(graph_t *sg);
extern point dotneato_closest (splines *spl, point p);
extern void graph_init(graph_t *g);
extern void dotneato_initialize(GVC_t *gvc, int, char **);
extern void setCmdName(char *);
extern void dotneato_usage(int);
extern char* getFlagOpt (int argc, char** argv, int* idx);
extern void dotneato_postprocess(Agraph_t *, nodesizefn_t);
extern void dotneato_set_margins(GVC_t *gvc, Agraph_t *);
extern void dotneato_eof(GVC_t *gvc);
extern void dotneato_terminate(GVC_t *gvc);
extern void dotneato_write(GVC_t *gvc);
extern void dotneato_write_one(GVC_t *gvc, graph_t *g);
extern int edge_in_CB(Agedge_t *);
extern int edge_in_layer(Agraph_t *, Agedge_t *);
extern double elapsed_sec(void);
extern void enqueue(queue *, Agnode_t *);
extern void enqueue_neighbors(queue *, Agnode_t *, int);
extern void emit_attachment(GVC_t *gvc, textlabel_t *, splines *);
extern void emit_clusters(GVC_t *gvc, Agraph_t *g, int flags);
extern void emit_eof(GVC_t *gvc);
extern void emit_graph(GVC_t *gvc, graph_t *g, int flags);
extern void emit_edge(GVC_t *gvc, edge_t* e);
extern void emit_node(GVC_t *gvc, node_t* n);





extern void emit_label(GVC_t *gvc, textlabel_t *, void *obj);
extern int emit_once(char *message);
extern void emit_once_reset();
extern void emit_reset(GVC_t *gvc);
extern void endpath(path*, Agedge_t *, int, pathend_t*, boolean);
extern void epsf_init(node_t *n);
extern void epsf_free(node_t *n);
extern void epsf_gencode(GVC_t *gvc, node_t *n);
extern FILE *file_select(char *);
extern shape_desc *find_user_shape(char *);
extern box flip_rec_box(box b, point p);
extern point flip_pt(point p, int rankdir);
extern pointf flip_ptf(pointf p, int rankdir);
extern void free_line(textline_t *);
extern void free_label(textlabel_t *);
extern void free_queue(queue *);
extern void free_ugraph(graph_t *);
extern char *gd_alternate_fontlist(char *font);
extern char *gd_textsize(textline_t *textline, char *fontname, double fontsz, char **fontpath);
extern point gd_user_shape_size(node_t *n, char *shapeimagefile);
extern point ps_user_shape_size(node_t *n, char *shapeimagefile);
extern point svg_user_shape_size(node_t *n, char *shapeimagefile);
extern point quartz_user_shape_size(node_t *n, char *shapeimagefile);
extern point gd_image_size(graph_t *n, char *shapeimagefile);
extern point ps_image_size(graph_t *n, char *shapeimagefile);
extern point svg_image_size(graph_t *n, char *shapeimagefile);
extern point quartz_image_size(graph_t *n, char *shapeimagefile);
extern boolean getdoubles2pt(graph_t* g, char* name, point* result);
extern void getdouble(graph_t* g, char* name, double* result);
extern splines* getsplinepoints (edge_t* e);
extern void global_def(char *, Agsym_t *(*fun)(Agraph_t *, char *, char *));
extern point image_size(graph_t *g, char *shapefile);
extern void init_ugraph(graph_t *g);
extern point invflip_pt(point p, int rankdir);
extern int is_natural_number(char *);
extern boolean isPolygon (node_t*);
extern int late_attr(void*, char *);
extern int late_bool(void *, Agsym_t *, int);
extern double late_double(void*, Agsym_t *, double, double);
extern int late_int(void*, Agsym_t *, int, int);
extern char *late_nnstring(void*, Agsym_t *, char *);
extern char *late_string(void*, Agsym_t *, char *);
extern int layer_index(char *, int);
extern int layerindex(char *);
extern char *strdup_and_subst_graph(char *str, Agraph_t *g);
extern char *strdup_and_subst_node(char *str, Agnode_t *n);
extern char *strdup_and_subst_edge(char *str, Agedge_t *e);
extern char *xml_string(char *s);
extern void makeSelfEdge(path*, edge_t**, int, int, int, splineInfo*);
extern textlabel_t *make_label(int, char *, double, char *, char *, graph_t *);
extern int mapbool(char *);
extern int maptoken(char *, char **, int *);
extern void map_begin_cluster(graph_t *g);
extern void map_begin_edge(Agedge_t *e);
extern void map_begin_node(Agnode_t *n);
extern void map_edge(Agedge_t *);
extern point map_point(point);
extern box mkbox(point, point);
extern point neato_closest (splines *spl, point p);
extern bezier* new_spline (edge_t* e, int sz);
extern queue *new_queue(int);
extern FILE *next_input_file(void);
extern Agraph_t *next_input_graph(void);
extern int node_in_CB(node_t *);
extern int node_in_layer(Agraph_t *, node_t *);
extern void osize_label(textlabel_t *, int *, int *, int *, int *);
extern point pageincr(point);
extern char **parse_style(char* s);
extern void place_graph_label(Agraph_t *);
extern void place_portlabel (edge_t *e, boolean head_p);
extern point pointof(int, int);
extern void printptf(FILE *, point);
extern int processClusterEdges (graph_t *g);
extern char *ps_string(char *s);
extern void rank(graph_t *g, int balance, int maxiter);
extern void rec_attach_bb(Agraph_t *);
extern int rect_overlap(box, box);
extern void routesplinesinit(void);
extern point *routesplines(path *, int *);
extern void routesplinesterm(void);
extern char* safefile(char *shapefilename);
extern int selectedlayer(char *);
extern void setup_graph(GVC_t *gvc, graph_t *g);
extern shape_kind shapeOf(node_t*);
extern void shape_clip (node_t *n, point curve[4], edge_t *e);
extern point spline_at_y(splines* spl, int y);
extern void start_timer(void);
extern double textwidth(textline_t *textline, char *fontname, double fontsz);
extern void translate_bb(Agraph_t *, int);
extern Agnode_t *UF_find(Agnode_t *);
extern void UF_remove(Agnode_t *, Agnode_t *);
extern void UF_setname(Agnode_t *, Agnode_t *);
extern void UF_singleton(Agnode_t *);
extern Agnode_t *UF_union(Agnode_t *, Agnode_t *);
extern void undoClusterEdges (graph_t *g);
extern void update(edge_t *e, edge_t *f);
extern void updateBB (graph_t* g, textlabel_t* lp);
extern void use_library(char *);
extern char *username();
extern point user_shape_size(node_t *n, char *shapefile);
extern int validpage(point);
extern void write_plain(GVC_t *gvc, FILE*);
extern void write_plain_ext(GVC_t *gvc, FILE*);
extern void* zmalloc(size_t);
extern void* zrealloc(void*, size_t, size_t, size_t);
extern void* gmalloc(size_t);
extern void* grealloc(void*, size_t);




extern point sub_points(point, point);
extern int lang_select(GVC_t *gvc, char *, int);

extern void toggle(int);
extern int test_toggle();
# 199 "renderprocs.h"
extern codegen_info_t* first_codegen();
extern codegen_info_t* next_codegen();
# 52 "render.h" 2
# 1 "../../dotneato/gvrender/gvrender.h" 1
# 18 "../../dotneato/gvrender/gvrender.h"
# 1 "../../dotneato/gvrender/gvplugin.h" 1
# 26 "../../dotneato/gvrender/gvplugin.h"
typedef enum { API_renderer, NUM_APIS} api_t;


typedef struct {
        int id;
        char *type;
 int quality;
 void *engine;
 void *features;
} gvplugin_type_t;

typedef struct {
 api_t api;
 gvplugin_type_t *types;
} gvplugin_api_t;

typedef struct {
 char *name;
 gvplugin_api_t *apis;
} gvplugin_t;
# 19 "../../dotneato/gvrender/gvrender.h" 2
# 1 "../../dotneato/gvrender/gvrenderint.h" 1
# 22 "../../dotneato/gvrender/gvrenderint.h"
typedef struct gvrender_job_s gvrender_job_t;

struct gvrender_job_s {
    gvrender_job_t *next;
    char *output_filename;
    char *output_langname;
    FILE *output_file;
    void *interim_output;
    int output_lang;
};





typedef struct {
        int does_flags;
        int emit_flags;
 int default_margin;
 double default_dpi;
        char **knowncolors;
 int sz_knowncolors;
 color_type_t color_type;
 boolean y_goes_down;
} gvrender_features_t;



typedef struct gv_plugin_s gv_plugin_t;

struct gv_plugin_s {
        gv_plugin_t *next;
        char *typestr;
 int quality;
        char *path;
 gvplugin_type_t *typeptr;
};

typedef enum {PEN_NONE, PEN_DASHED, PEN_DOTTED, PEN_SOLID} pen_type;
typedef enum {FILL_NONE, FILL_SOLID} fill_type;
typedef enum {FONT_REGULAR, FONT_BOLD, FONT_ITALIC} font_type;



typedef struct {
 char *fontfam,fontopt;
        color_t pencolor,fillcolor;
        pen_type pen;
 fill_type fill;
 int penwidth;
        double fontsz;
} gvstyle_t;



struct GVC_s {

    char *user;
    char **info;


    gvrender_job_t *jobs;
    gvrender_job_t *job;
    void (*errorfn)(char *fmt, ...);


    gv_plugin_t *apis[NUM_APIS];
    gv_plugin_t *api[NUM_APIS];


    gvrender_engine_t *render_engine;
    gvrender_features_t *render_features;
    int render_id;

    codegen_t *codegen;

    char **lib;
    point pages;


    graph_t *g;
    void *surface;
    boolean external_surface;

    box bb;
    point pb;
    point margin;
    double dpi;
    color_t bgcolor;

    gvstyle_t styles[4];
    int SP;
    gvstyle_t *style;


    point size;
    double zoom;
    pointf focus;
    double scale;
    pointf compscale;
    int rot;


    point page;
    int page_number;


    int layer;
    int nLayers;
};
# 20 "../../dotneato/gvrender/gvrender.h" 2







extern GVC_t *gvNEWcontext(char **info, char *user);
extern void gvBindContext(GVC_t * gvc, graph_t *g);
extern void gvFREEcontext(GVC_t * gvc);



extern void gvconfig(GVC_t * gvc, char *config);



extern boolean gvplugin_install (GVC_t *gvc, api_t api,
 char *typestr, int quality, char *path, gvplugin_type_t *typeptr);
extern gv_plugin_t *gvplugin_load (GVC_t *gvc, api_t api, char *type);
extern const char *gvplugin_list (GVC_t *gvc, api_t api, char *str);
extern void gvplugin_builtins(GVC_t * gvc);
extern api_t gvplugin_api(char *str);



extern void gvrender_output_filename_job(GVC_t * gvc, char *name);
extern void gvrender_output_langname_job(GVC_t * gvc, char *name);
extern gvrender_job_t *gvrender_first_job(GVC_t * gvc);
extern gvrender_job_t *gvrender_next_job(GVC_t * gvc);
extern void gvrender_delete_jobs(GVC_t * gvc);



extern int gvrender_features(GVC_t * gvc);
extern void gvrender_reset(GVC_t * gvc);
extern void gvrender_begin_job(GVC_t * gvc, char **lib, point pages);
extern void gvrender_end_job(GVC_t * gvc);
extern void gvrender_begin_graph(GVC_t * gvc, graph_t * g, box bb,
     point pb);
extern void gvrender_end_graph(GVC_t * gvc);
extern void gvrender_begin_page(GVC_t * gvc, point page, double scale,
    int rot, point offset);
extern void gvrender_end_page(GVC_t * gvc);
extern void gvrender_begin_layer(GVC_t * gvc, char *layerName, int n,
     int nLayers);
extern void gvrender_end_layer(GVC_t * gvc);
extern void gvrender_begin_cluster(GVC_t * gvc, graph_t * sg);
extern void gvrender_end_cluster(GVC_t * gvc);
extern void gvrender_begin_nodes(GVC_t * gvc);
extern void gvrender_end_nodes(GVC_t * gvc);
extern void gvrender_begin_edges(GVC_t * gvc);
extern void gvrender_end_edges(GVC_t * gvc);
extern void gvrender_begin_node(GVC_t * gvc, node_t * n);
extern void gvrender_end_node(GVC_t * gvc);
extern void gvrender_begin_edge(GVC_t * gvc, edge_t * e);
extern void gvrender_end_edge(GVC_t * gvc);
extern void gvrender_begin_context(GVC_t * gvc);
extern void gvrender_end_context(GVC_t * gvc);
extern void gvrender_begin_anchor(GVC_t * gvc, char *href, char *tooltip, char *target);
extern void gvrender_end_anchor(GVC_t * gvc);
extern void gvrender_set_font(GVC_t * gvc, char *fontname, double fontsize);
extern void gvrender_textline(GVC_t * gvc, pointf p, textline_t * str);
extern void gvrender_set_pencolor(GVC_t * gvc, char *name);
extern void gvrender_set_fillcolor(GVC_t * gvc, char *name);
extern void gvrender_set_style(GVC_t * gvc, char **s);
extern void gvrender_ellipse(GVC_t * gvc, point p, int rx, int ry,
        int filled);
extern void gvrender_polygon(GVC_t * gvc, point * A, int n, int filled);
extern void gvrender_beziercurve(GVC_t * gvc, pointf * AF, int n,
     int arrow_at_start, int arrow_at_end);
extern void gvrender_polyline(GVC_t * gvc, point * A, int n);
extern void gvrender_comment(GVC_t * gvc, void *obj, attrsym_t * sym);
extern void gvrender_user_shape(GVC_t * gvc, char *name, point * A,
    int sides, int filled);
# 53 "render.h" 2
# 12 "shapes.c" 2

# 1 "htmltable.h" 1
# 26 "htmltable.h"
typedef struct {
  char* name;
  char* color;
  double size;
} htmlfont_t;


typedef struct {
  textline_t* line;
  short nlines;
  box box;
  htmlfont_t* font;
} htmltxt_t;

typedef struct {
  box box;
  char* src;
} htmlimg_t;

typedef struct {
  char* href;
  char* port;
  char* target;
  char* bgcolor;
  char* pencolor;
  signed char space;
  unsigned char border;
  unsigned char pad;
  unsigned char flags;
  unsigned short width;
  unsigned short height;
  box box;
} htmldata_t;






typedef struct htmlcell_t htmlcell_t;
typedef struct htmltbl_t htmltbl_t;

struct htmltbl_t {
  htmldata_t data;
  union {
    struct {
      htmlcell_t* parent;
      htmlcell_t** cells;
    } n;
    struct {
      htmltbl_t* prev;
      Dt_t* rows;
    } p;
  } u;
  signed char cb;
  int* heights;
  int* widths;
  int rc;
  int cc;
  htmlfont_t* font;
};

struct htmllabel_t {
  union {
    htmltbl_t* tbl;
    htmltxt_t* txt;
    htmlimg_t* img;
  } u;
  char kind;
};

struct htmlcell_t {
  htmldata_t data;
  unsigned short cspan;
  unsigned short rspan;
  unsigned short col;
  unsigned short row;
  htmllabel_t child;
  htmltbl_t* parent;
};






typedef struct {
  Dtlink_t link;
  union {
    Dt_t* rp;
    htmlcell_t* cp;
  } u;
} pitem;

extern htmllabel_t* parseHTML (char*, int*);

extern int make_html_label(textlabel_t *lp, void *obj);
extern void emit_html_label(GVC_t *gvc, htmllabel_t* lp, textlabel_t*, void* obj);

extern void free_html_label (htmllabel_t*, int);
extern void free_html_data (htmldata_t*);
extern void free_html_text (htmltxt_t*);

extern box* html_port (node_t* n, char* pname);
extern int html_path (node_t* n, edge_t* e, int pt, box* rv, int* k);
extern int html_inside (node_t * n, pointf p, edge_t * e);
# 14 "shapes.c" 2
# 1 "/usr/lib/gcc/i386-redhat-linux/4.0.0/include/limits.h" 1 3 4
# 15 "shapes.c" 2
# 25 "shapes.c"
void sincos(x,s,c) double x,*s,*c; { *s = sin(x); *c = cos(x); }




static port Center = { {0,0}, -1, 0, 0, 0, 0};






static char* point_style[3] = {"invis\0","filled\0",0};
static shape_desc* point_desc;



static void poly_init(node_t *n);
static void poly_free(node_t *n);
static port poly_port(node_t *n, char *portname, char*);
static boolean poly_inside(inside_t *inside_context, pointf p);
static int poly_path(node_t *n, edge_t *e, int pt, box rv[], int* kptr);
static void poly_gencode(GVC_t *gvc, node_t *n);

static void record_init(node_t *n);
static void record_free(node_t *n);
static port record_port(node_t *n, char *portname, char*);
static boolean record_inside(inside_t *inside_context, pointf p);
static int record_path(node_t *n, edge_t *e, int pt, box rv[], int* kptr);
static void record_gencode(GVC_t *gvc, node_t *n);

static void point_init(node_t *n);

static boolean epsf_inside(inside_t *inside_context, pointf p);




static polygon_t p_polygon = { 0, 1, 0, 0., 0., 0. };

static polygon_t p_ellipse = { 0, 1, 1, 0., 0., 0. };
static polygon_t p_circle = { (!(0)), 1, 1, 0., 0., 0. };
static polygon_t p_egg = { 0, 1, 1, 0., -.3, 0. };
static polygon_t p_triangle = { 0, 1, 3, 0., 0., 0. };
static polygon_t p_box = { 0, 1, 4, 0., 0., 0. };
static polygon_t p_plaintext = { 0, 0, 4, 0., 0., 0. };
static polygon_t p_diamond = { 0, 1, 4, 45., 0., 0. };
static polygon_t p_trapezium = { 0, 1, 4, 0., -.4, 0. };
static polygon_t p_parallelogram = { 0, 1, 4, 0., 0., .6 };
static polygon_t p_house = { 0, 1, 5, 0., -.64, 0. };
static polygon_t p_pentagon = { 0, 1, 5, 0., 0., 0. };
static polygon_t p_hexagon = { 0, 1, 6, 0., 0., 0. };
static polygon_t p_septagon = { 0, 1, 7, 0., 0., 0. };
static polygon_t p_octagon = { 0, 1, 8, 0., 0., 0. };

static polygon_t p_doublecircle = { (!(0)), 2, 1, 0., 0., 0. };
static polygon_t p_invtriangle = { 0, 1, 3, 180., 0., 0. };
static polygon_t p_invtrapezium = { 0, 1, 4, 180., -.4, 0. };
static polygon_t p_invhouse = { 0, 1, 5, 180., -.64, 0. };
static polygon_t p_doubleoctagon = { 0, 2, 8, 0., 0., 0. };
static polygon_t p_tripleoctagon = { 0, 3, 8, 0., 0., 0. };
static polygon_t p_Mdiamond = { 0, 1, 4, 45., 0., 0. ,(1 << 2)|(1 << 3)};
static polygon_t p_Msquare = { (!(0)), 1, 4, 0., 0., 0. ,(1 << 2)};
static polygon_t p_Mcircle = { (!(0)), 1, 1, 0., 0., 0.,(1 << 2)|(1 << 3)};
# 115 "shapes.c"
static shape_functions poly_fns = {
 poly_init,
 poly_free,
 poly_port,
 poly_inside,
 poly_path,
 poly_gencode
};
static shape_functions point_fns = {
 point_init,
 poly_free,
 poly_port,
 poly_inside,
 ((void *)0),
 poly_gencode
};
static shape_functions record_fns = {
 record_init,
 record_free,
 record_port,
 record_inside,
 record_path,
 record_gencode
};
static shape_functions epsf_fns = {
 epsf_init,
 epsf_free,
 poly_port,
 epsf_inside,
 ((void *)0),
 epsf_gencode
};

static shape_desc Shapes[] = {
{"box" ,&poly_fns ,&p_box },
{"polygon" ,&poly_fns ,&p_polygon },
{"ellipse" ,&poly_fns ,&p_ellipse },
{"circle" ,&poly_fns ,&p_circle },
{"point" ,&point_fns ,&p_circle },
{"egg" ,&poly_fns ,&p_egg },
{"triangle" ,&poly_fns ,&p_triangle },
{"none" ,&poly_fns ,&p_plaintext },
{"plaintext" ,&poly_fns ,&p_plaintext },
{"diamond" ,&poly_fns ,&p_diamond },
{"trapezium" ,&poly_fns ,&p_trapezium },
{"parallelogram",&poly_fns ,&p_parallelogram },
{"house" ,&poly_fns ,&p_house },
{"pentagon" ,&poly_fns ,&p_pentagon },
{"hexagon" ,&poly_fns ,&p_hexagon },
{"septagon" ,&poly_fns ,&p_septagon },
{"octagon" ,&poly_fns ,&p_octagon },
{"rect" ,&poly_fns ,&p_box },
{"rectangle" ,&poly_fns ,&p_box },
{"doublecircle" ,&poly_fns ,&p_doublecircle },
{"doubleoctagon",&poly_fns ,&p_doubleoctagon },
{"tripleoctagon",&poly_fns ,&p_tripleoctagon },
{"invtriangle" ,&poly_fns ,&p_invtriangle },
{"invtrapezium" ,&poly_fns ,&p_invtrapezium },
{"invhouse" ,&poly_fns ,&p_invhouse },
{"Mdiamond" ,&poly_fns ,&p_Mdiamond },
{"Msquare" ,&poly_fns ,&p_Msquare },
{"Mcircle" ,&poly_fns ,&p_Mcircle },

{"record" ,&record_fns ,((void *)0) },
{"Mrecord" ,&record_fns ,((void *)0) },
{"epsf" ,&epsf_fns ,((void *)0) },
{((void *)0) ,((void *)0) ,((void *)0) }
};

static void
unrecognized(node_t* n, char* p)
{
 agerr(AGWARN, "node %s, port %s unrecognized\n",n->name,p);
}

static double quant(double val, double q)
{
 int i;
 i = val / q;
 if (i * q + .00001 < val) i++;
 return i * q;
}

static int same_side(pointf p0, pointf p1, pointf L0, pointf L1)
{
 int s0,s1;
 double a,b,c;


 a = -(L1.y - L0.y);
 b = (L1.x - L0.x);
 c = a * L0.x + b * L0.y;

 s0 = (a*p0.x + b*p0.y - c >= 0);
 s1 = (a*p1.x + b*p1.y - c >= 0);
 return (s0 == s1);
}

static
void pencolor(GVC_t *gvc, node_t *n)
{
 char *color;

 color = late_nnstring(n,N_color,"");
 if (color[0])
  gvrender_set_pencolor(gvc, color);
}

static
char* findFill(node_t *n)
{
 char *color;

 color = late_nnstring(n,N_fillcolor,"");
 if (! color[0]) {

  color = late_nnstring(n,N_color,"");
  if (! color[0]) {
   if ((n)->u.shape == point_desc) {
    color = "black";
   }
   else {
    color = (Output_lang == 4 ? "black" : "lightgrey");
   }
  }
 }
 return color;
}

static
void fillcolor(GVC_t *gvc, node_t *n)
{
 gvrender_set_fillcolor(gvc, findFill(n));
}

static char**
checkStyle (node_t* n, int* flagp)
{
 char* style;
    char** pstyle = 0;
 int istyle = 0;
 polygon_t* poly;

 style = late_nnstring(n,N_style,"");
 if (style[0]) {
  int i;
  pstyle = parse_style(style);
  for (i = 0; pstyle[i]; i++) {
   if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (pstyle[i]) && __builtin_constant_p ("filled") && (__s1_len = strlen (pstyle[i]), __s2_len = strlen ("filled"), (!((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("filled") + 1) - (size_t)(const void *)("filled") == 1) || __s2_len >= 4)) ? __builtin_strcmp (pstyle[i], "filled") : (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) && (__s1_len = strlen (pstyle[i]), __s1_len < 4) ? (__builtin_constant_p ("filled") && ((size_t)(const void *)(("filled") + 1) - (size_t)(const void *)("filled") == 1) ? __builtin_strcmp (pstyle[i], "filled") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("filled"); register int __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("filled") && ((size_t)(const void *)(("filled") + 1) - (size_t)(const void *)("filled") == 1) && (__s2_len = strlen ("filled"), __s2_len < 4) ? (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) ? __builtin_strcmp (pstyle[i], "filled") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (pstyle[i]); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("filled"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("filled"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("filled"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("filled"))[3]); } } __result; }))) : __builtin_strcmp (pstyle[i], "filled")))); }) == 0) {istyle |= (1 << 0);}
   else if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (pstyle[i]) && __builtin_constant_p ("rounded") && (__s1_len = strlen (pstyle[i]), __s2_len = strlen ("rounded"), (!((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("rounded") + 1) - (size_t)(const void *)("rounded") == 1) || __s2_len >= 4)) ? __builtin_strcmp (pstyle[i], "rounded") : (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) && (__s1_len = strlen (pstyle[i]), __s1_len < 4) ? (__builtin_constant_p ("rounded") && ((size_t)(const void *)(("rounded") + 1) - (size_t)(const void *)("rounded") == 1) ? __builtin_strcmp (pstyle[i], "rounded") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("rounded"); register int __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("rounded") && ((size_t)(const void *)(("rounded") + 1) - (size_t)(const void *)("rounded") == 1) && (__s2_len = strlen ("rounded"), __s2_len < 4) ? (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) ? __builtin_strcmp (pstyle[i], "rounded") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (pstyle[i]); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("rounded"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("rounded"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("rounded"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("rounded"))[3]); } } __result; }))) : __builtin_strcmp (pstyle[i], "rounded")))); }) == 0) {istyle |= (1 << 1);}
   else if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (pstyle[i]) && __builtin_constant_p ("diagonals") && (__s1_len = strlen (pstyle[i]), __s2_len = strlen ("diagonals"), (!((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("diagonals") + 1) - (size_t)(const void *)("diagonals") == 1) || __s2_len >= 4)) ? __builtin_strcmp (pstyle[i], "diagonals") : (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) && (__s1_len = strlen (pstyle[i]), __s1_len < 4) ? (__builtin_constant_p ("diagonals") && ((size_t)(const void *)(("diagonals") + 1) - (size_t)(const void *)("diagonals") == 1) ? __builtin_strcmp (pstyle[i], "diagonals") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("diagonals"); register int __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("diagonals") && ((size_t)(const void *)(("diagonals") + 1) - (size_t)(const void *)("diagonals") == 1) && (__s2_len = strlen ("diagonals"), __s2_len < 4) ? (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) ? __builtin_strcmp (pstyle[i], "diagonals") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (pstyle[i]); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("diagonals"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("diagonals"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("diagonals"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("diagonals"))[3]); } } __result; }))) : __builtin_strcmp (pstyle[i], "diagonals")))); }) == 0) {istyle |= (1 << 2);}
   else if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (pstyle[i]) && __builtin_constant_p ("invis") && (__s1_len = strlen (pstyle[i]), __s2_len = strlen ("invis"), (!((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("invis") + 1) - (size_t)(const void *)("invis") == 1) || __s2_len >= 4)) ? __builtin_strcmp (pstyle[i], "invis") : (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) && (__s1_len = strlen (pstyle[i]), __s1_len < 4) ? (__builtin_constant_p ("invis") && ((size_t)(const void *)(("invis") + 1) - (size_t)(const void *)("invis") == 1) ? __builtin_strcmp (pstyle[i], "invis") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("invis"); register int __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (pstyle[i]))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("invis") && ((size_t)(const void *)(("invis") + 1) - (size_t)(const void *)("invis") == 1) && (__s2_len = strlen ("invis"), __s2_len < 4) ? (__builtin_constant_p (pstyle[i]) && ((size_t)(const void *)((pstyle[i]) + 1) - (size_t)(const void *)(pstyle[i]) == 1) ? __builtin_strcmp (pstyle[i], "invis") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (pstyle[i]); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("invis"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("invis"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("invis"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("invis"))[3]); } } __result; }))) : __builtin_strcmp (pstyle[i], "invis")))); }) == 0) {istyle |= (1 << 4);}
  }
 }
 if ((poly = (n)->u.shape->polygon)) istyle |= poly->option;

 *flagp = istyle;
 return pstyle;
}

static
int stylenode(GVC_t *gvc, node_t *n)
{
 char** pstyle;
 int istyle;

 if ((pstyle = checkStyle (n, &istyle)))
  gvrender_set_style(gvc, pstyle);
 return istyle;
}

static void hack1(GVC_t *gvc, node_t *n, char* str, int k)
{
 pointf p;
 double fontsize;
 textline_t fake;

 fontsize = (n)->u.label->fontsize*.8;

 p.x = (n)->u.coord.x - (strlen(str) * (n)->u.label->fontsize) / 2;
 p.y = (n)->u.coord.y + (k * ((n)->u.ht - (n)->u.label->fontsize - 2)) / 2;
 gvrender_begin_context(gvc);
 gvrender_set_font(gvc, (n)->u.label->fontname,fontsize);
 fake.str = str;
 fake.width = strlen(str) * fontsize;
 fake.just = 0;
 gvrender_textline(gvc, p, &fake);
 gvrender_end_context(gvc);
}

static void Mlabel_hack(GVC_t *gvc, node_t *n)
{
 char *str;
 if ((str = agget(n,"toplabel"))) hack1(gvc, n, str, 1);
 if ((str = agget(n,"bottomlabel"))) hack1(gvc, n, str, -1);
}

static void Mcircle_hack(GVC_t *gvc, node_t *n)
{
 double x,y;
 point A[2],p;

 y = .7500;
 x = .6614;
 p.y = y * (n)->u.ht / 2.0;
 p.x = (n)->u.rw * x;

 A[0] = add_points(p,(n)->u.coord);
 A[1].y = A[0].y; A[1].x = A[0].x - 2*p.x;
 gvrender_polyline(gvc, A, 2);
 A[0].y -= 2*p.y; A[1].y = A[0].y;
 gvrender_polyline(gvc, A, 2);
}

static point interpolate(double t, point p0, point p1)
{
 point rv;
 rv.x = p0.x + t * (p1.x - p0.x);
 rv.y = p0.y + t * (p1.y - p0.y);
 return rv;
}

static void round_corners(GVC_t *gvc, node_t *n, point *A, int sides, int style)
{
 point *B,C[2],p0,p1;
 pointf BF[4];
 double d,dx,dy,t;
 int i,seg,mode;

 if (style & (1 << 2)) mode = (1 << 2);
 else mode = (1 << 1);
 B = (point*)zmalloc((4*sides+4)*sizeof(point));
 i = 0;
 for (seg = 0; seg < sides; seg++) {
  p0 = A[seg];
  if (seg < sides - 1) p1 = A[seg+1];
  else p1 = A[0];
  dx = p1.x - p0.x;
  dy = p1.y - p0.y;
  d = sqrt(dx*dx + dy*dy);

  t = 12 / d;
  if (mode != (1 << 1)) B[i++] = p0;
  if (mode == (1 << 1)) B[i++] = interpolate(.5*t,p0,p1);
  B[i++] = interpolate(t,p0,p1);
  B[i++] = interpolate(1.0 - t,p0,p1);
  if (mode == (1 << 1)) B[i++] = interpolate(1.0 - .5*t,p0,p1);
 }
 B[i++] = B[0];
 B[i++] = B[1];
 B[i++] = B[2];

 if (mode == (1 << 1)) {
  for (seg = 0; seg < sides; seg++) {
   gvrender_polyline(gvc, B + 4*seg+1, 2);


   for (i=0; i<4; i++)
    (BF[i].x = B[4*seg+2+i].x, BF[i].y = B[4*seg+2+i].y);
   gvrender_beziercurve(gvc, BF, 4, 0, 0);
  }
 }
 else {
  pencolor(gvc, n);
  if (style & (1 << 0))
   fillcolor(gvc, n);
  gvrender_polygon(gvc, A, sides, style&(1 << 0));
  for (seg = 0; seg < sides; seg++) {




   C[0] = B[3 * seg + 2]; C[1] = B[3 * seg + 4];
   gvrender_polyline(gvc, C, 2);
  }
 }
 free(B);
}







static double
userSize (node_t *n)
{
 double w, h;
 w = late_double(n,N_width,0.0,0.01);
 h = late_double(n,N_height,0.0,0.02);
 return ((((((w)>(h)?(w):(h)))*72.0>=0)?(int)((((w)>(h)?(w):(h)))*72.0 + .5):(int)((((w)>(h)?(w):(h)))*72.0 - .5)));
}

shape_kind
shapeOf(node_t* n)
{
 shape_desc* sh = (n)->u.shape;
 void (*ifn)(node_t*);

 if (!sh) return SH_UNSET;
 ifn = (n)->u.shape->fns->initfn;
 if (ifn == poly_init) return SH_POLY;
 else if (ifn == record_init) return SH_RECORD;
 else if (ifn == point_init) return SH_POINT;
 else return SH_USER;
}

boolean
isPolygon (node_t* n)
{
  return ((n)->u.shape && ((n)->u.shape->fns->initfn == poly_init));
}

static void
poly_init(node_t *n)
{
 pointf dimen, bb;
 pointf P,Q,R;
 pointf *vertices;
 char *p;
 double temp,alpha,beta,gamma,delta;
 double orientation,distortion,skew;
 double sectorangle, sidelength, skewdist, gdistortion, gskew;
 double angle, sinx, cosx, xmax, ymax, scalex, scaley;
 double width, height, marginx, marginy;
 int regular,peripheries,sides;
 int i,j,outp;
 polygon_t *poly=(polygon_t*)zmalloc(sizeof(polygon_t));

 regular = (n)->u.shape->polygon->regular;
 peripheries = (n)->u.shape->polygon->peripheries;
 sides = (n)->u.shape->polygon->sides;
 orientation = (n)->u.shape->polygon->orientation;
 skew = (n)->u.shape->polygon->skew;
 distortion = (n)->u.shape->polygon->distortion;
 regular |= mapbool(agget(n,"regular"));
# 460 "shapes.c"
 if (regular) {
  double sz = userSize(n);
  if (sz > 0.0)
   width = height = sz;
  else {
   width = (n)->u.width;
   height = (n)->u.height;
   width = height = ((((((width)<(height)?(width):(height)))*72.0>=0)?(int)((((width)<(height)?(width):(height)))*72.0 + .5):(int)((((width)<(height)?(width):(height)))*72.0 - .5)));
  }
 }
 else {
  width = (((((n)->u.width)*72.0>=0)?(int)(((n)->u.width)*72.0 + .5):(int)(((n)->u.width)*72.0 - .5)));
  height = (((((n)->u.height)*72.0>=0)?(int)(((n)->u.height)*72.0 + .5):(int)(((n)->u.height)*72.0 - .5)));
 }

 peripheries = late_int(n,N_peripheries,peripheries,0);
 orientation += late_double(n,N_orientation,0.0,-360.0);
 if (sides==0) {
  skew = late_double(n,N_skew,0.0,-100.0);
  sides = late_int(n,N_sides,4,0);
  distortion = late_double(n,N_distortion,0.0,-100.0);
 }


 dimen = (n)->u.label->dimen;


 if ((dimen.x > 0.0) || (dimen.y > 0.0)) {

         if ((p = agget(n,"margin"))) {
                 i = sscanf(p,"%lf,%lf",&marginx,&marginy);
                 if (i > 0) {
    dimen.x += 2 * ((((marginx)*72.0>=0)?(int)((marginx)*72.0 + .5):(int)((marginx)*72.0 - .5)));
                  if (i > 1) dimen.y += 2 * ((((marginy)*72.0>=0)?(int)((marginy)*72.0 + .5):(int)((marginy)*72.0 - .5)));
    else dimen.y += 2 * ((((marginx)*72.0>=0)?(int)((marginx)*72.0 + .5):(int)((marginx)*72.0 - .5)));
   }
   else {((dimen).x += 4*4); ((dimen).y += 2*4);};
         }
  else {((dimen).x += 4*4); ((dimen).y += 2*4);};
 }

 if (mapbool(late_string(n,N_fixed,"false"))) {
  if ((width < dimen.x) || (height < dimen.y))
   agerr(AGWARN, "node '%s', graph '%s' size too small for label\n",
    n->name, n->graph->name);
  dimen.x = dimen.y = 0;
 }
 else {
  if ((n)->u.shape->usershape) {
   point imagesize;
   char* sfile = agget(n,"shapefile");

   imagesize = user_shape_size(n, sfile);
   if ((imagesize.x == -1) && (imagesize.y == -1)) {
    agerr(AGERR,"No or improper shapefile=\"%s\" for node \"%s\"\n",
     (sfile ? sfile : "<nil>"), n->name);
    }
   else (n->graph)->u.has_images = 1;
   dimen.x = ((dimen.x)>(imagesize.x)?(dimen.x):(imagesize.x));
   dimen.y = ((dimen.y)>(imagesize.y)?(dimen.y):(imagesize.y));
  }
 }


 if ((temp = (n->graph)->u.drawing->quantum) > 0.0) {
  temp = ((((temp)*72.0>=0)?(int)((temp)*72.0 + .5):(int)((temp)*72.0 - .5)));
  dimen.x = quant(dimen.x,temp);
  dimen.y = quant(dimen.y,temp);
 }




 if (regular) {
  dimen.x = dimen.y = ((dimen.x)>(dimen.y)?(dimen.x):(dimen.y));
 }



 if ((sides<=2) && ((distortion!=0.) || (skew!=0.))) {
  sides = 120;
 }


 if (sides <= 2) {

  if (dimen.y > dimen.x) temp = dimen.x * (sqrt(2.) - 1.);
  else temp = dimen.y * (sqrt(2.) - 1.);
  dimen.x += temp; dimen.y += temp;
 }
 else if (sides == 4 && (((orientation>=0)?(int)(orientation + .5):(int)(orientation - .5))%90) == 0 && distortion == 0. && skew == 0. ) {

 }
 else {


  temp = cos(3.14159265358979323846/sides);
  dimen.x /= temp; dimen.y /= temp;

  if (dimen.y > dimen.x) temp = dimen.x * (sqrt(2.) - 1.);
  else temp = dimen.y * (sqrt(2.) - 1.);
  dimen.x += temp; dimen.y += temp;
 }


 bb.x = width = ((width)>(dimen.x)?(width):(dimen.x));
 bb.y = height = ((height)>(dimen.y)?(height):(dimen.y));


 if (! mapbool(late_string(n,N_nojustify,"false"))) {
  (n)->u.label->d.x = bb.x - dimen.x;
  (n)->u.label->d.y = bb.y - dimen.y;
 }

 outp=peripheries;
 if (peripheries<1) outp=1;
 if (sides<3) {
  sides=1;
  vertices=(pointf*)zmalloc((outp)*sizeof(pointf));
  P.x=bb.x/2.; P.y=bb.y/2.;
  vertices[0] = P;
  if (peripheries>1) {
   for (j=1; j<peripheries; j++) {
    P.x += 4; P.y += 4;
    vertices[j] = P;
   }
   bb.x=2.*P.x; bb.y=2.*P.y;
  }
 } else {
  vertices=(pointf*)zmalloc((outp*sides)*sizeof(pointf));
  sectorangle = 2.*3.14159265358979323846/sides;
  sidelength = sin(sectorangle/2.);
  skewdist = hypot(fabs(distortion)+fabs(skew),1.);
  gdistortion = distortion*sqrt(2.)/cos(sectorangle/2.);
  gskew = skew/2.;
  angle = (sectorangle-3.14159265358979323846)/2.;
  sincos(angle,&sinx,&cosx);
  R.x = .5*cosx; R.y = .5*sinx;
  xmax=ymax=0.;
  angle += (3.14159265358979323846 -sectorangle)/2.;
  for (i=0; i<sides; i++) {


   angle += sectorangle;
   sincos(angle,&sinx,&cosx);
   R.x += sidelength*cosx; R.y += sidelength*sinx;


   P.x = R.x*(skewdist+R.y*gdistortion)+R.y*gskew;
   P.y = R.y;


   alpha = ((orientation)/180.0 * 3.14159265358979323846)+atan2(P.y,P.x);
   sincos(alpha,&sinx,&cosx);
   P.x = P.y = hypot(P.x,P.y);
   P.x *= cosx; P.y *= sinx;


   P.x *= bb.x; P.y *= bb.y;


   xmax = ((fabs(P.x))>(xmax)?(fabs(P.x)):(xmax)); ymax = ((fabs(P.y))>(ymax)?(fabs(P.y)):(ymax));


   vertices[i] = P;
  }


  xmax *=2.; ymax *=2.;
  bb.x=((width)>(xmax)?(width):(xmax)); bb.y=((height)>(ymax)?(height):(ymax));
  scalex=bb.x/xmax; scaley=bb.y/ymax;

  for (i=0; i<sides; i++) {
   P = vertices[i];
   P.x *= scalex; P.y *= scaley;
   vertices[i] = P;
  }

  if (peripheries>1) {
   Q = vertices[(sides-1)];
   R = vertices[0];
   beta = atan2(R.y-Q.y,R.x-Q.x);
   for (i=0; i<sides; i++) {


    P = Q; Q = R; R = vertices[(i+1)%sides];
    alpha = beta; beta = atan2(R.y-Q.y,R.x-Q.x);
    gamma = (alpha+3.14159265358979323846 -beta)/2.;



    temp = 4/sin(gamma);


    delta = alpha-gamma;
    sincos(delta,&sinx,&cosx);
    sinx *= temp; cosx *= temp;



    for (j=1; j<peripheries; j++) {
     Q.x += cosx; Q.y += sinx;
     vertices[i+j*sides] = Q;
    }
   }
   for (i=0; i<sides; i++) {
    P = vertices[i+(peripheries-1)*sides];
    bb.x = ((2.*fabs(P.x))>(bb.x)?(2.*fabs(P.x)):(bb.x));
    bb.y = ((2.*fabs(P.y))>(bb.y)?(2.*fabs(P.y)):(bb.y));
   }
  }
 }
 poly->regular = regular;
 poly->peripheries = peripheries;
 poly->sides = sides;
 poly->orientation = orientation;
 poly->skew = skew;
 poly->distortion = distortion;
 poly->vertices = vertices;

 (n)->u.width = ((bb.x)/72.0);
 (n)->u.height = ((bb.y)/72.0);
 (n)->u.shape_info = (void*) poly;
}

static void poly_free(node_t *n)
{
 polygon_t* p = (n)->u.shape_info;

 if (p) {
  free(p->vertices);
  free(p);
 }
}



static boolean poly_inside(inside_t *inside_context, pointf p)
{
 static node_t* lastn;
 static edge_t* laste;
 static node_t* datan;
 static polygon_t *poly;
 static int last,outp,sides;
 static pointf O;
 static pointf *vertex;
 static double xsize,ysize,scalex,scaley,box_URx,box_URy;
 static box* bp;

 int i,i1,j,s;
 pointf P,Q,R;
 edge_t* f;
 edge_t* e = inside_context->e;
 node_t* n = inside_context->n;

 P = flip_ptf(p, (n->graph)->u.rankdir);
 for (f = e; (f)->u.edge_type != 0; f = (f)->u.to_orig);
 e = f;

 if ((n != lastn) || (e != laste)) {
  bp = ((n) == (e)->head ? (e)->u.head_port.bp : (e)->u.tail_port.bp);

  if ((bp == ((void *)0)) && (n != datan)) {
   datan = n;
   poly = (polygon_t*) (n)->u.shape_info;
   vertex = poly->vertices;
   sides = poly->sides;


   if (((n->graph)->u.rankdir & 1)) {
    ysize = (n)->u.lw + (n)->u.rw; xsize = (n)->u.ht;
   }
   else {
    xsize = (n)->u.lw + (n)->u.rw; ysize = (n)->u.ht;
   }


   if (xsize == 0.0) xsize = 1.0;
   if (ysize == 0.0) ysize = 1.0;
   scalex = (((((n)->u.width)*72.0>=0)?(int)(((n)->u.width)*72.0 + .5):(int)(((n)->u.width)*72.0 - .5)))/xsize;
   scaley = (((((n)->u.height)*72.0>=0)?(int)(((n)->u.height)*72.0 + .5):(int)(((n)->u.height)*72.0 - .5)))/ysize;
   box_URx = (((((n)->u.width)*72.0>=0)?(int)(((n)->u.width)*72.0 + .5):(int)(((n)->u.width)*72.0 - .5)))/2.0;
   box_URy = (((((n)->u.height)*72.0>=0)?(int)(((n)->u.height)*72.0 + .5):(int)(((n)->u.height)*72.0 - .5)))/2.0;


   outp=(poly->peripheries-1)*sides;
   if (outp<0) outp=0;
  }
  lastn = n;
  laste = e;
 }


 if (bp) {
  box bbox = *bp;
  return ((((bbox.LL.x) <= (P.x)) && ((P.x) <= (bbox.UR.x))) && (((bbox.LL.y) <= (P.y)) && ((P.y) <= (bbox.UR.y))));
 }


 P.x *= scalex; P.y *= scaley;


 if ((fabs(P.x)>box_URx) || (fabs(P.y)>box_URy)) return 0;


 if (sides<=2) return (hypot(P.x/box_URx,P.y/box_URy)<1.);


 i = last % sides;
 i1 = (i + 1) % sides;
 Q = vertex[i+outp]; R = vertex[i1+outp];
 if ( !(same_side(P,O,Q,R))) return 0;
 if ( (s=same_side(P,Q,R,O)) && (same_side(P,R,O,Q))) return (!(0));
 for (j = 1; j < sides; j++) {
  if (s) {
   i = i1; i1 = (i + 1) % sides;
  } else {
   i1 = i; i = (i + sides - 1) % sides;
  }
  if ( !(same_side(P,O,vertex[i+outp],vertex[i1+outp]))) {
   last = i;
   return 0;
  }
 }
 last = i;
 return (!(0));
}

static int poly_path(node_t *n, edge_t *e, int pt, box rv[], int* kptr)
{
 int side = 0;
 edge_t *f;

 if ((n)->u.label->html && (n)->u.has_port) {
  for (f = e; (f)->u.edge_type != 0; f = (f)->u.to_orig);
  e = f;
  if (((n) == (e)->head ? (e)->u.head_port.bp : (e)->u.tail_port.bp)) side = html_path (n, e, pt, rv, kptr);
 }
 return side;
}
# 808 "shapes.c"
static int
compassPort (node_t* n, box* bp, port* pp, char* compass)
{
 box b;
 point p, ctr;
 int rv = 0;

 if (bp) {
  b = *bp;
  p = pointof((b.LL.x+b.UR.x)/2,(b.LL.y+b.UR.y)/2);
 }
 else {
  p.x = p.y = 0;
  if (((n->graph)->u.rankdir & 1)) {
   b.UR.x = (n)->u.ht / 2;
   b.LL.x = -b.UR.x;
   b.UR.y = (n)->u.lw;
   b.LL.y = -b.UR.y;
  }
  else {
   b.UR.y = (n)->u.ht / 2;
   b.LL.y = -b.UR.y;
   b.UR.x = (n)->u.lw;
   b.LL.x = -b.UR.x;
  }
 }
 ctr = p;
 if (compass && *compass) {
  int margin = 1;
  switch(*compass++) {
  case 'e': p.x = b.UR.x - margin;
   break;
  case 's':
   p.y = b.LL.y + margin;
   switch(*compass) {
   case '\0': break;
   case 'e': p.x = b.UR.x - margin; break;
   case 'w': p.x = b.LL.x + margin; break;
   default : p.y = ctr.y; rv = 1; break;
   }
   break;
  case 'w': p.x = b.LL.x + margin;
   break;
  case 'n':
   p.y = b.UR.y - margin;
   switch(*compass) {
   case '\0': break;
   case 'e': p.x = b.UR.x - margin; break;
   case 'w': p.x = b.LL.x + margin; break;
   default : p.y = ctr.y; rv = 1; break;
   }
   break;
  default :
   rv = 1;
   break;
  }
 }
 p = invflip_pt(p, (n->graph)->u.rankdir);
 pp->bp = bp;
 pp->p = p;
 pp->order = (256 * ((n)->u.lw + p.x)) / ((n)->u.lw + (n)->u.rw);
 pp->constrained = 0;
 pp->defined = (!(0));
 return rv;
}

static port
poly_port(node_t *n, char* portname, char* compass)
{
 port rv;
 box* bp;

 if (portname[0] == '\0') return Center;

 if (((n)->u.label->html) && ((bp = html_port (n, portname)))) {
  if (compassPort (n, bp, &rv, compass))
   agerr(AGWARN, "node %s, port %s, unrecognized compass point '%s' - ignored\n",
   n->name,portname,compass);
 }
 else if (compassPort (n, ((void *)0), &rv, portname)) {
  unrecognized(n,portname);
 }

 return rv;
}


static void poly_gencode(GVC_t *gvc, node_t *n)
{
 polygon_t *poly;
 double xsize, ysize;
 int i,j,peripheries,sides,style;
 pointf P,*vertices;
 static point *A;
 static int A_size;
 int filled;

 poly = (polygon_t*) (n)->u.shape_info;
 vertices = poly->vertices;
 sides = poly->sides;
 peripheries = poly->peripheries;
 if (A_size < sides) {A_size = sides + 5; A = (A? (point*)grealloc(A,(A_size)*sizeof(point)):(point*)gmalloc((A_size)*sizeof(point)));}

 (n)->u.label->p = (n)->u.coord;

 xsize = (16.0 * ((n)->u.lw + (n)->u.rw) / (((((n)->u.width)*72.0>=0)?(int)(((n)->u.width)*72.0 + .5):(int)(((n)->u.width)*72.0 - .5))));
 ysize = (16.0 * (n)->u.ht / (((((n)->u.height)*72.0>=0)?(int)(((n)->u.height)*72.0 + .5):(int)(((n)->u.height)*72.0 - .5))));



 if ((gvc->codegen == &VRML_CodeGen) && (peripheries == 0)) {
  peripheries = 1;
 }


 if ((n)->u.shape == point_desc) {
  checkStyle (n, &style);
  if (style & (1 << 4)) gvrender_set_style(gvc, point_style);
  else gvrender_set_style(gvc, &point_style[1]);
  style = (1 << 0);
 }
 else {
  style = stylenode(gvc, n);
 }
 if (style & (1 << 0)) {
  fillcolor(gvc, n);
  filled = 1;
 }
 else {
  filled = 0;
 }
 pencolor(gvc, n);

 if ((n)->u.shape->usershape) {
  for (i = 0; i < sides; i++) {
   P = vertices[i];



   A[i].x = ((P.x * xsize>=0)?(int)(P.x * xsize + .5):(int)(P.x * xsize - .5)) / 16;
   A[i].y = ((P.y * ysize>=0)?(int)(P.y * ysize + .5):(int)(P.y * ysize - .5)) / 16;
   if (sides > 2) {
    A[i].x += (n)->u.coord.x;
    A[i].y += (n)->u.coord.y;
   }
  }
  gvrender_user_shape(gvc,(n)->u.shape->name,A,sides,filled);
  filled = 0;
 }

 if ((peripheries == 0) && filled) {
  char* color;
  peripheries = 1;
  color = findFill(n);
  if (color[0])
   gvrender_set_pencolor(gvc, color);
 }
 for (j = 0; j < peripheries; j++) {
  for (i = 0; i < sides; i++) {
   P = vertices[i+j*sides];



   A[i].x = ((P.x * xsize>=0)?(int)(P.x * xsize + .5):(int)(P.x * xsize - .5)) / 16;
   A[i].y = ((P.y * ysize>=0)?(int)(P.y * ysize + .5):(int)(P.y * ysize - .5)) / 16;
   if (sides > 2) {
    A[i].x += (n)->u.coord.x;
    A[i].y += (n)->u.coord.y;
   }
  }
  if (sides <= 2) {
   gvrender_ellipse(gvc, (n)->u.coord, A[0].x, A[0].y, filled);
   if (style & (1 << 2)) {
    Mcircle_hack(gvc, n);
   }
  }
  else if (style & ((1 << 1) | (1 << 2))) {
   round_corners(gvc, n, A, sides, style);
  }
  else {
   gvrender_polygon(gvc, A, sides, filled);
  }

  filled = 0;
 }

 if (style & (1 << 3)) Mlabel_hack(gvc, n);
 emit_label(gvc, (n)->u.label, (void*)n);
# 1008 "shapes.c"
}
# 1017 "shapes.c"
static void
point_init(node_t *n)
{
 textlabel_t* p;

 if (!point_desc) {
  shape_desc *ptr;
  for (ptr = Shapes; ptr->name; ptr++)
   if (!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (ptr->name) && __builtin_constant_p ("point") && (__s1_len = strlen (ptr->name), __s2_len = strlen ("point"), (!((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("point") + 1) - (size_t)(const void *)("point") == 1) || __s2_len >= 4)) ? __builtin_strcmp (ptr->name, "point") : (__builtin_constant_p (ptr->name) && ((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) && (__s1_len = strlen (ptr->name), __s1_len < 4) ? (__builtin_constant_p ("point") && ((size_t)(const void *)(("point") + 1) - (size_t)(const void *)("point") == 1) ? __builtin_strcmp (ptr->name, "point") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("point"); register int __result = (((__const unsigned char *) (__const char *) (ptr->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ptr->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ptr->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (ptr->name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("point") && ((size_t)(const void *)(("point") + 1) - (size_t)(const void *)("point") == 1) && (__s2_len = strlen ("point"), __s2_len < 4) ? (__builtin_constant_p (ptr->name) && ((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) ? __builtin_strcmp (ptr->name, "point") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (ptr->name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("point"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("point"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("point"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("point"))[3]); } } __result; }))) : __builtin_strcmp (ptr->name, "point")))); })) {point_desc = ptr; break;}
  ((void) ((point_desc) ? 0 : (__assert_fail ("point_desc", "shapes.c", 1026, __PRETTY_FUNCTION__), 0)));
 }


 p = (n)->u.label;
 free_label(p);
 (n)->u.label = (textlabel_t*)zmalloc(sizeof(textlabel_t));
 (n)->u.label->text = (__extension__ (__builtin_constant_p ("") && ((size_t)(const void *)(("") + 1) - (size_t)(const void *)("") == 1) ? (((__const char *) (""))[0] == '\0' ? (char *) calloc (1, 1) : ({ size_t __len = strlen ("") + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, "", __len); __retval; })) : __strdup ("")));






    if (((N_width) && (*(agxget(n,N_width->index)) != '\0'))) {
     if (((N_height) && (*(agxget(n,N_height->index)) != '\0'))) {
   (n)->u.width = (n)->u.height = (((n)->u.width)<((n)->u.height)?((n)->u.width):((n)->u.height));
     }
  else (n)->u.height = (n)->u.width;
    }
    else if (((N_height) && (*(agxget(n,N_height->index)) != '\0'))) {
  (n)->u.width = (n)->u.height;
    }
 else (n)->u.width = (n)->u.height = 0.05;

 poly_init (n);
}
# 1065 "shapes.c"
static char *reclblp;

static field_t *
parse_reclbl(node_t *n, int LR, int flag, char* text)
{
 field_t *fp, *rv = (field_t*)zmalloc(sizeof(field_t));
 char *tsp, *psp, *hstsp, *hspsp, *sp;
 char port[128];
 int maxf, cnt, mode, wflag, ishardspace, fi;

 fp = ((void *)0);
 for (maxf = 1, cnt = 0, sp = reclblp; *sp; sp++) {
  if (*sp == '\\') {
   sp++;
   if (*sp && (*sp == '{' || *sp == '}' || *sp == '|'))
    continue;
  }
  if (*sp == '{')
   cnt++;
  else if (*sp == '}')
   cnt--;
  else if (*sp == '|' && cnt == 0)
   maxf++;
  if (cnt < 0)
   break;
 }
 rv->fld = (field_t**)zmalloc((maxf)*sizeof(field_t*));
 rv->LR = LR;
 mode = 0;
 fi = 0;
 hstsp = tsp = text, hspsp = psp = &port[0];
 wflag = (!(0));
 ishardspace = 0;
 while (wflag) {
  switch (*reclblp) {
  case '<':
   if (mode & (4 | 2))
    return ((void *)0);
   mode |= (2 | 16);
   reclblp++;
   break;
  case '>':
   if (!(mode & 16))
    return ((void *)0);
   mode &= ~16;
   reclblp++;
   break;
  case '{':
   reclblp++;
   if (mode != 0 || !*reclblp)
    return ((void *)0);
   mode = 4;
   if (!(rv->fld[fi++] = parse_reclbl (n, (!(LR)) , 0, text)))
    return ((void *)0);
   break;
  case '}':
  case '|':
  case '\000':
   if ((!*reclblp && !flag) || (mode & 16))
    return ((void *)0);
   if (!(mode & 4))
    fp = rv->fld[fi++] = (field_t*)zmalloc(sizeof(field_t));
   if (mode & 2) {
    if (psp > &port[0] + 1 &&
      psp - 1 != hspsp &&
      *(psp - 1) == ' ')
     psp--;
    *psp = '\000';
    fp->id = (__extension__ (__builtin_constant_p (&port[0]) && ((size_t)(const void *)((&port[0]) + 1) - (size_t)(const void *)(&port[0]) == 1) ? (((__const char *) (&port[0]))[0] == '\0' ? (char *) calloc (1, 1) : ({ size_t __len = strlen (&port[0]) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, &port[0], __len); __retval; })) : __strdup (&port[0])));
    hspsp = psp = &port[0];
   }
   if (!(mode & (1 | 4)))
    mode |= 1, *tsp++ = ' ';
   if (mode & 1) {
    if (tsp > text + 1 &&
      tsp - 1 != hstsp &&
      *(tsp - 1) == ' ')
     tsp--;
    *tsp = '\000';
    fp->lp = make_label (0,(__extension__ (__builtin_constant_p (text) && ((size_t)(const void *)((text) + 1) - (size_t)(const void *)(text) == 1) ? (((__const char *) (text))[0] == '\0' ? (char *) calloc (1, 1) : ({ size_t __len = strlen (text) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, text, __len); __retval; })) : __strdup (text))), (n)->u.label->fontsize, (n)->u.label->fontname, (n)->u.label->fontcolor,n->graph);
    fp->LR = (!(0));
    hstsp = tsp = text;
   }
   if (*reclblp) {
    if (*reclblp == '}') {
     reclblp++;
     rv->n_flds = fi;
     return rv;
    }
    mode = 0;
    reclblp++;
   } else
    wflag = 0;
   break;
  case '\\':
   if (*(reclblp + 1)) {
    if (((*(reclblp + 1)) == '{' || (*(reclblp + 1)) == '}' || (*(reclblp + 1)) == '|' || (*(reclblp + 1)) == '<' || (*(reclblp + 1)) == '>'))
     reclblp++;
    else if (*(reclblp + 1) == ' ')
     ishardspace = (!(0)), reclblp++;
   }

  default:
   if ((mode & 4) && *reclblp != ' ')
    return ((void *)0);
   if (!(mode & (8 | 16)) && *reclblp != ' ')
    mode |= (8 | 1);
   if (mode & 8) {
    if (!(*reclblp == ' ' && !ishardspace &&
      *(tsp - 1) == ' '))
     *tsp++ = *reclblp;
    if (ishardspace)
     hstsp = tsp - 1;
   } else if (mode & 16) {
    if (!(*reclblp == ' ' && !ishardspace &&
      (psp == &port[0] ||
      *(psp - 1) == ' ')))
     *psp++ = *reclblp;
    if (ishardspace)
     hspsp = psp - 1;
   }
   reclblp++;
   while (*reclblp & 128)
    *tsp++ = *reclblp++;
   break;
  }
 }
 rv->n_flds = fi;
 return rv;
}

static point size_reclbl(node_t* n, field_t* f)
{
 int i;
 char *p;
 double marginx,marginy;
 point d,d0;
 pointf dimen;

 if (f->lp) {
  dimen = f->lp->dimen;


  if ((dimen.x > 0.0) || (dimen.y > 0.0)) {

          if ((p = agget(n,"margin"))) {
                  i = sscanf(p,"%lf,%lf",&marginx,&marginy);
                  if (i > 0) {
     dimen.x += 2 * ((((marginx)*72.0>=0)?(int)((marginx)*72.0 + .5):(int)((marginx)*72.0 - .5)));
                   if (i > 1) dimen.y += 2 * ((((marginy)*72.0>=0)?(int)((marginy)*72.0 + .5):(int)((marginy)*72.0 - .5)));
     else dimen.y += 2 * ((((marginy)*72.0>=0)?(int)((marginy)*72.0 + .5):(int)((marginy)*72.0 - .5)));
    }
    else {((dimen).x += 4*4); ((dimen).y += 2*4);};
          }
   else {((dimen).x += 4*4); ((dimen).y += 2*4);};
  }
  (d.x = ((dimen.x>=0)?(int)(dimen.x + .5):(int)(dimen.x - .5)), d.y = ((dimen.y>=0)?(int)(dimen.y + .5):(int)(dimen.y - .5)));
 }
 else {
  d.x = d.y = 0;
  for (i = 0; i < f->n_flds; i++) {
   d0 = size_reclbl(n,f->fld[i]);
   if (f->LR) { d.x += d0.x; d.y = ((d.y)>(d0.y)?(d.y):(d0.y)); }
   else { d.y += d0.y; d.x = ((d.x)>(d0.x)?(d.x):(d0.x)); }
  }
 }
 f->size = d;
 return d;
}

static void resize_reclbl(field_t* f, point sz, int nojustify_p)
{
 int i,amt;
 double inc;
 point d,newsz;
 field_t *sf;


 d.x = sz.x - f->size.x; d.y = sz.y - f->size.y;
 f->size = sz;


 if (f->lp && ! nojustify_p) {
  (f->lp->d.x = d.x, f->lp->d.y = d.y);
 }


 if (f->n_flds) {

  if (f->LR)
   inc = (double)d.x/f->n_flds;
  else
   inc = (double)d.y/f->n_flds;
  for (i = 0; i < f->n_flds; i++) {
   sf = f->fld[i];
   amt = ((int)((i+1)*inc)) - ((int)(i*inc));
   if (f->LR)
    newsz = pointof(sf->size.x+amt,sz.y);
   else
    newsz = pointof(sz.x,sf->size.y+amt);
   resize_reclbl(sf,newsz,nojustify_p);
  }
 }
}

static void pos_reclbl(field_t* f, point ul)
{
 int i;

 f->b.LL = pointof(ul.x,ul.y-f->size.y);
 f->b.UR = pointof(ul.x+f->size.x,ul.y);
 for (i = 0; i < f->n_flds; i++) {
  pos_reclbl(f->fld[i],ul);
  if (f->LR) ul.x = ul.x + f->fld[i]->size.x;
  else ul.y = ul.y - f->fld[i]->size.y;
 }
}
# 1318 "shapes.c"
static void
record_init(node_t *n)
{
 field_t *info;
 point ul,sz;
    int len;
    char* textbuf;

 reclblp = (n)->u.label->text;
    len = strlen (reclblp);
    textbuf = (char*)zmalloc((len+1)*sizeof(char));
 if (!(info = parse_reclbl(n,(!(((n->graph)->u.rankdir & 1))), (!(0)), textbuf))) {
  agerr(AGERR, "bad label format %s\n", (n)->u.label->text);
  reclblp = "\\N";
  info = parse_reclbl(n,(!(((n->graph)->u.rankdir & 1))), (!(0)), textbuf);
 }
    free (textbuf);

 size_reclbl(n,info);
 sz.x = (((((n)->u.width)*72.0>=0)?(int)(((n)->u.width)*72.0 + .5):(int)(((n)->u.width)*72.0 - .5))); sz.y = (((((n)->u.height)*72.0>=0)?(int)(((n)->u.height)*72.0 + .5):(int)(((n)->u.height)*72.0 - .5)));
    if (mapbool(late_string(n,N_fixed,"false"))) {
  if ((sz.x < info->size.x) || (sz.y < info->size.y)) {




  }
    }
    else {
  sz.x = ((info->size.x)>(sz.x)?(info->size.x):(sz.x)); sz.y = ((info->size.y)>(sz.y)?(info->size.y):(sz.y));
    }
 resize_reclbl(info,sz,mapbool(late_string(n,N_nojustify,"false")));
 ul = pointof(-sz.x/2,sz.y/2);
 pos_reclbl(info,ul);
 (n)->u.width = ((info->size.x)/72.0);
 (n)->u.height = ((info->size.y)/72.0);
 (n)->u.shape_info = (void*) info;
}

static void record_free(node_t *n)
{
 field_t* p = (n)->u.shape_info;

 free(p);
}

static field_t * map_rec_port(field_t* f, char* str)
{
 field_t *rv;
 int sub;

 if (f->id && (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (f->id) && __builtin_constant_p (str) && (__s1_len = strlen (f->id), __s2_len = strlen (str), (!((size_t)(const void *)((f->id) + 1) - (size_t)(const void *)(f->id) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((str) + 1) - (size_t)(const void *)(str) == 1) || __s2_len >= 4)) ? __builtin_strcmp (f->id, str) : (__builtin_constant_p (f->id) && ((size_t)(const void *)((f->id) + 1) - (size_t)(const void *)(f->id) == 1) && (__s1_len = strlen (f->id), __s1_len < 4) ? (__builtin_constant_p (str) && ((size_t)(const void *)((str) + 1) - (size_t)(const void *)(str) == 1) ? __builtin_strcmp (f->id, str) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (str); register int __result = (((__const unsigned char *) (__const char *) (f->id))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (f->id))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (f->id))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (f->id))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (str) && ((size_t)(const void *)((str) + 1) - (size_t)(const void *)(str) == 1) && (__s2_len = strlen (str), __s2_len < 4) ? (__builtin_constant_p (f->id) && ((size_t)(const void *)((f->id) + 1) - (size_t)(const void *)(f->id) == 1) ? __builtin_strcmp (f->id, str) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (f->id); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (str))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (str))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (str))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (str))[3]); } } __result; }))) : __builtin_strcmp (f->id, str)))); }) == 0)) rv = f;
 else {
  rv = ((void *)0);
  for (sub = 0; sub < f->n_flds; sub++)
   if ((rv = map_rec_port(f->fld[sub],str))) break;
 }
 return rv;
}

static port record_port(node_t *n, char* portname, char* compass)
{
 field_t *f;
 field_t *subf;
 port rv;

 if (portname[0] == '\0') return Center;
 f = (field_t*) (n)->u.shape_info;
 if ((subf = map_rec_port(f,portname))) {
  if (compassPort (n, &subf->b, &rv, compass))
   agerr(AGWARN, "node %s, port %s, unrecognized compass point '%s' - ignored\n",
   n->name,portname,compass);
 }
 else if (compassPort (n, &f->b, &rv, portname)) {
  unrecognized(n,portname);
 }

 return rv;
}

static boolean record_inside(inside_t *inside_context, pointf p)
{

 edge_t *f;
 field_t *fld0;
 static edge_t *last_e;
 static node_t *last_n;
 static box bbox;
        edge_t *e = inside_context->e;
        node_t *n = inside_context->n;


 p = flip_ptf(p, (n->graph)->u.rankdir);

 for (f = e; (f)->u.edge_type != 0; f = (f)->u.to_orig);
 e = f;

 if ((e != last_e) || (n != last_n)) {
  box* bp;
  last_e = e; last_n = n;
  bp = ((n) == (e)->head ? (e)->u.head_port.bp : (e)->u.tail_port.bp);
  if (bp) bbox = *bp;
  else {
   fld0 = (field_t*) (n)->u.shape_info;
   bbox = fld0->b;
  }
 }

 return ((((bbox.LL.x) <= (p.x)) && ((p.x) <= (bbox.UR.x))) && (((bbox.LL.y) <= (p.y)) && ((p.y) <= (bbox.UR.y))));
}

static int record_path(node_t *n, edge_t *e, int pt, box rv[], int* kptr)
{
 int i,side,ls,rs;
 point p;
 field_t *info;

 if (pt == 1) p = (e)->u.tail_port.p;
 else p = (e)->u.head_port.p;
 info = (field_t*) (n)->u.shape_info;

 for (i = 0; i < info->n_flds; i++) {
  if (!((n->graph)->u.rankdir & 1))
   { ls = info->fld[i]->b.LL.x; rs = info->fld[i]->b.UR.x; }
  else
   { ls = info->fld[i]->b.LL.y; rs = info->fld[i]->b.UR.y; }
  if ((((ls) <= (p.x)) && ((p.x) <= (rs)))) {

   if (((n->graph)->u.rankdir & 1)) {
    rv[0] = flip_rec_box(info->fld[i]->b,(n)->u.coord);






   }
   else {
    rv[0].LL.x = (n)->u.coord.x + ls;
    rv[0].LL.y = (n)->u.coord.y - (n)->u.ht/2;
    rv[0].UR.x = (n)->u.coord.x + rs;
   }
# 1468 "shapes.c"
   rv[0].UR.y = (n)->u.coord.y + (n)->u.ht/2;
   *kptr = 1;
   break;
  }
 }
 if (pt == 1) side = (1<<0); else side = (1<<2);
 return side;
}

static void gen_fields(GVC_t *gvc, node_t *n, field_t* f)
{
 int i;
 double cx,cy;
 point A[2];

 if (f->lp) {
  cx = (f->b.LL.x + f->b.UR.x)/2.0 + (n)->u.coord.x;
  cy = (f->b.LL.y + f->b.UR.y)/2.0 + (n)->u.coord.y;
  f->lp->p = pointof((int)cx,(int)cy);
  emit_label(gvc, f->lp, (void*)n);
 }

 for (i = 0; i < f->n_flds; i++) {
  if (i > 0) {
   if (f->LR) {
    A[0] = f->fld[i]->b.LL;
    A[1].x = A[0].x;
    A[1].y = f->fld[i]->b.UR.y;
   }
   else {
    A[1] = f->fld[i]->b.UR;
    A[0].x = f->fld[i]->b.LL.x;
    A[0].y = A[1].y;
   }
   A[0] = add_points(A[0],(n)->u.coord);
   A[1] = add_points(A[1],(n)->u.coord);
   gvrender_polyline(gvc, A, 2);
  }
  gen_fields(gvc, n, f->fld[i]);
 }
}

static void record_gencode(GVC_t *gvc, node_t *n)
{
 point A[4];
 int i,style;
 field_t *f;

 f = (field_t*) (n)->u.shape_info;
 A[0] = f->b.LL;
 A[2] = f->b.UR;
 A[1].x = A[2].x; A[1].y = A[0].y;
 A[3].x = A[0].x; A[3].y = A[2].y;
 for (i = 0; i < 4; i++)
  A[i] = add_points(A[i],(n)->u.coord);
 style = stylenode(gvc, n);
 pencolor(gvc, n);
 if (style & (1 << 0))
  fillcolor(gvc, n);
 if ((*((n)->u.shape->name)==*("Mrecord")&&!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((n)->u.shape->name) && __builtin_constant_p ("Mrecord") && (__s1_len = strlen ((n)->u.shape->name), __s2_len = strlen ("Mrecord"), (!((size_t)(const void *)(((n)->u.shape->name) + 1) - (size_t)(const void *)((n)->u.shape->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("Mrecord") + 1) - (size_t)(const void *)("Mrecord") == 1) || __s2_len >= 4)) ? __builtin_strcmp ((n)->u.shape->name, "Mrecord") : (__builtin_constant_p ((n)->u.shape->name) && ((size_t)(const void *)(((n)->u.shape->name) + 1) - (size_t)(const void *)((n)->u.shape->name) == 1) && (__s1_len = strlen ((n)->u.shape->name), __s1_len < 4) ? (__builtin_constant_p ("Mrecord") && ((size_t)(const void *)(("Mrecord") + 1) - (size_t)(const void *)("Mrecord") == 1) ? __builtin_strcmp ((n)->u.shape->name, "Mrecord") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("Mrecord"); register int __result = (((__const unsigned char *) (__const char *) ((n)->u.shape->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((n)->u.shape->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((n)->u.shape->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ((n)->u.shape->name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("Mrecord") && ((size_t)(const void *)(("Mrecord") + 1) - (size_t)(const void *)("Mrecord") == 1) && (__s2_len = strlen ("Mrecord"), __s2_len < 4) ? (__builtin_constant_p ((n)->u.shape->name) && ((size_t)(const void *)(((n)->u.shape->name) + 1) - (size_t)(const void *)((n)->u.shape->name) == 1) ? __builtin_strcmp ((n)->u.shape->name, "Mrecord") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ((n)->u.shape->name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("Mrecord"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("Mrecord"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("Mrecord"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("Mrecord"))[3]); } } __result; }))) : __builtin_strcmp ((n)->u.shape->name, "Mrecord")))); })))
  style |= (1 << 1);
 if (style & ((1 << 1) | (1 << 2)))
  round_corners(gvc, n, A, 4, (1 << 1));
 else
  gvrender_polygon(gvc, A, 4, style&(1 << 0));
 gen_fields(gvc, n, f);
}

static shape_desc **UserShape;
static int N_UserShape;

shape_desc *find_user_shape(char* name)
{
 int i;
 if (UserShape) {
  for (i = 0; i < N_UserShape; i++) {
   if ((*(UserShape[i]->name)==*(name)&&!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (UserShape[i]->name) && __builtin_constant_p (name) && (__s1_len = strlen (UserShape[i]->name), __s2_len = strlen (name), (!((size_t)(const void *)((UserShape[i]->name) + 1) - (size_t)(const void *)(UserShape[i]->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (UserShape[i]->name, name) : (__builtin_constant_p (UserShape[i]->name) && ((size_t)(const void *)((UserShape[i]->name) + 1) - (size_t)(const void *)(UserShape[i]->name) == 1) && (__s1_len = strlen (UserShape[i]->name), __s1_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (UserShape[i]->name, name) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (name); register int __result = (((__const unsigned char *) (__const char *) (UserShape[i]->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (UserShape[i]->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (UserShape[i]->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (UserShape[i]->name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s2_len = strlen (name), __s2_len < 4) ? (__builtin_constant_p (UserShape[i]->name) && ((size_t)(const void *)((UserShape[i]->name) + 1) - (size_t)(const void *)(UserShape[i]->name) == 1) ? __builtin_strcmp (UserShape[i]->name, name) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (UserShape[i]->name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (name))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (name))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (name))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (name))[3]); } } __result; }))) : __builtin_strcmp (UserShape[i]->name, name)))); }))) return UserShape[i];
  }
 }
 return ((void *)0);
}

static shape_desc *user_shape(char* name)
{
 int i;
 shape_desc *p;

 if ((p = find_user_shape(name))) return p;
 i = N_UserShape++;
 UserShape = (UserShape? (shape_desc**)grealloc(UserShape,(N_UserShape)*sizeof(shape_desc*)):(shape_desc**)gmalloc((N_UserShape)*sizeof(shape_desc*)));
 p = UserShape[i] = (shape_desc*)zmalloc(sizeof(shape_desc));
 *p = Shapes[0];
 p->name = name;
 p->usershape = (!(0));
 if (Lib == ((void *)0) && __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("custom") && (__s1_len = strlen (name), __s2_len = strlen ("custom"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "custom") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("custom") && ((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) ? __builtin_strcmp (name, "custom") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("custom"); register int __result = (((__const unsigned char *) (__const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("custom") && ((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) && (__s2_len = strlen ("custom"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "custom") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("custom"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("custom"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("custom"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("custom"))[3]); } } __result; }))) : __builtin_strcmp (name, "custom")))); }))
  agerr(AGWARN, "using %s for unknown shape %s\n", Shapes[0].name,p->name);
 return p;
}

shape_desc * bind_shape(char* name, node_t* np)
{
 shape_desc *ptr,*rv= ((void *)0);
 char* str;

 str = safefile(agget(np,"shapefile"));

 if (str && __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("epsf") && (__s1_len = strlen (name), __s2_len = strlen ("epsf"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("epsf") + 1) - (size_t)(const void *)("epsf") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "epsf") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("epsf") && ((size_t)(const void *)(("epsf") + 1) - (size_t)(const void *)("epsf") == 1) ? __builtin_strcmp (name, "epsf") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("epsf"); register int __result = (((__const unsigned char *) (__const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("epsf") && ((size_t)(const void *)(("epsf") + 1) - (size_t)(const void *)("epsf") == 1) && (__s2_len = strlen ("epsf"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "epsf") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("epsf"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("epsf"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("epsf"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("epsf"))[3]); } } __result; }))) : __builtin_strcmp (name, "epsf")))); })) name = "custom";
 if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p ("custom") && (__s1_len = strlen (name), __s2_len = strlen ("custom"), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) || __s2_len >= 4)) ? __builtin_strcmp (name, "custom") : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p ("custom") && ((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) ? __builtin_strcmp (name, "custom") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("custom"); register int __result = (((__const unsigned char *) (__const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("custom") && ((size_t)(const void *)(("custom") + 1) - (size_t)(const void *)("custom") == 1) && (__s2_len = strlen ("custom"), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (name, "custom") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("custom"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("custom"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("custom"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("custom"))[3]); } } __result; }))) : __builtin_strcmp (name, "custom")))); })) {
  for (ptr = Shapes; ptr->name; ptr++) {
   if (!__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (ptr->name) && __builtin_constant_p (name) && (__s1_len = strlen (ptr->name), __s2_len = strlen (name), (!((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s2_len >= 4)) ? __builtin_strcmp (ptr->name, name) : (__builtin_constant_p (ptr->name) && ((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) && (__s1_len = strlen (ptr->name), __s1_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? __builtin_strcmp (ptr->name, name) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (name); register int __result = (((__const unsigned char *) (__const char *) (ptr->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ptr->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (ptr->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (ptr->name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s2_len = strlen (name), __s2_len < 4) ? (__builtin_constant_p (ptr->name) && ((size_t)(const void *)((ptr->name) + 1) - (size_t)(const void *)(ptr->name) == 1) ? __builtin_strcmp (ptr->name, name) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (ptr->name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (name))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (name))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (name))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (name))[3]); } } __result; }))) : __builtin_strcmp (ptr->name, name)))); })) {rv = ptr; break;}
  }
 }
 if (rv == ((void *)0)) rv = user_shape(name);
 return rv;
}

static boolean epsf_inside(inside_t *inside_context, pointf p)
{
 pointf P;
 double x2;
        node_t *n = inside_context->n;

 P = flip_ptf(p, (n->graph)->u.rankdir);
 x2 = (n)->u.ht / 2;
 return ((P.y >= -x2) && (P.y <= x2) && (P.x >= -(n)->u.lw) && (P.x <= (n)->u.rw));
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]