WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / RNAforester / g2-0.70 / src / g2_control_pd.c
diff --git a/binaries/src/ViennaRNA/RNAforester/g2-0.70/src/g2_control_pd.c b/binaries/src/ViennaRNA/RNAforester/g2-0.70/src/g2_control_pd.c
new file mode 100644 (file)
index 0000000..7c04d2c
--- /dev/null
@@ -0,0 +1,314 @@
+/*****************************************************************************
+**  Copyright (C) 1998-2001  Ljubomir Milanovic & Horst Wagner
+**  This file is part of the g2 library
+**
+**  This library is free software; you can redistribute it and/or
+**  modify it under the terms of the GNU Lesser General Public
+**  License as published by the Free Software Foundation; either
+**  version 2.1 of the License, or (at your option) any later version.
+**
+**  This library is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+**  Lesser General Public License for more details.
+**
+**  You should have received a copy of the GNU Lesser General Public
+**  License along with this library; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "g2.h"
+#include "g2_device.h"
+#include "g2_physical_device.h"
+#include "g2_util.h"
+#include "g2_funix.h"
+
+
+
+/*
+ *
+ * Flush output
+ *
+ */
+void g2_flush_pd(g2_physical_device *pd)
+{
+    if(pd->ff[g2_Flush].fun!=NULL) {
+       pd->ff[g2_Flush].fun(pd->pid, pd->pdp);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Save output
+ *
+ */
+void g2_save_pd(g2_physical_device *pd)
+{
+    if(pd->ff[g2_Save].fun!=NULL) {
+       pd->ff[g2_Save].fun(pd->pid, pd->pdp);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Clear device
+ *
+ */
+void g2_clear_pd(g2_physical_device *pd)
+{
+    if(pd->ff[g2_Clear].fun!=NULL) {
+       pd->ff[g2_Clear].fun(pd->pid, pd->pdp);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Set pen
+ *
+ */
+void g2_pen_pd(g2_physical_device *pd, int color)
+{
+    if(pd->ff[g2_Pen].fun!=NULL) {
+       pd->ff[g2_Pen].fun(pd->pid, pd->pdp, color);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Set background color
+ *
+ */
+void g2_set_background_pd(g2_physical_device *pd, int color)
+{
+    if(pd->ff[g2_SetBackground].fun!=NULL) {
+       pd->ff[g2_SetBackground].fun(pd->pid, pd->pdp, color);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Set ink
+ *
+ */
+int g2_ink_pd(g2_physical_device *pd, double red, double green, double blue)
+{
+    int rv=-1;
+    
+    if(pd->ff[g2_Ink].fun!=NULL) {
+       rv=pd->ff[g2_Ink].fun(pd->pid, pd->pdp,
+                             red, green, blue);
+    } else {
+       /* emulate ... with .... */  
+    }
+    return rv;
+}
+
+
+
+
+/*
+ *
+ * Clear palette
+ *
+ */
+void g2_clear_palette_pd(g2_physical_device *pd)
+{
+    if(pd->ff[g2_ClearPalette].fun!=NULL) {
+       pd->ff[g2_ClearPalette].fun(pd->pid, pd->pdp);
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+/*
+ *
+ * Allocate basic colors
+ *
+ */
+void g2_allocate_basic_colors_pd(g2_physical_device *pd)
+{
+    double ct[3]={0.0, 0.5, 1.0};
+    int r, g, b;
+    
+    if(pd->ff[g2_Ink].fun!=NULL) {
+       pd->ff[g2_Ink].fun(pd->pid, pd->pdp,      /* white */
+                          1.0, 1.0, 1.0);
+       pd->ff[g2_Ink].fun(pd->pid, pd->pdp,      /* black */
+                          0.0, 0.0, 0.0);
+       for(r=0;r<3;r++)
+           for(g=0;g<3;g++)
+               for(b=0;b<3;b++)
+                   if((r==2 && g==2 && b==2) ||
+                      (r==0 && g==0 && b==0))
+                       continue;
+                   else
+                       pd->ff[g2_Ink].fun(pd->pid, pd->pdp,
+                                          ct[r], ct[g], ct[b]);
+    }  
+}
+
+
+/*
+ *
+ * Set font size
+ *
+ */
+void g2_set_font_size_pd(g2_physical_device *pd, double size)
+{
+    int is;
+    double ds;
+
+    if(pd->ff[g2_SetFontSize].fun!=NULL) {
+       switch(pd->coor_type) {
+         case g2_IntCoor:
+           is=dtoi(size*fabs(pd->a22));          /* to pd coordinates */
+           pd->ff[g2_SetFontSize].fun(pd->pid, pd->pdp, is);
+           break;
+         case g2_DoubleCoor:
+           ds=size*fabs(pd->a22);                /* to pd coordinates */
+           pd->ff[g2_SetFontSize].fun(pd->pid, pd->pdp, ds);
+           break;
+       }
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Set line width
+ *
+ */
+void g2_set_line_width_pd(g2_physical_device *pd, double w)
+{
+    int iw;
+    double dw;
+
+    if(pd->ff[g2_SetLineWidth].fun!=NULL) {
+       switch(pd->coor_type) {
+         case g2_IntCoor:
+           iw=dtoi(w*fabs(pd->a22));     /* to pd coordinates */
+           pd->ff[g2_SetLineWidth].fun(pd->pid, pd->pdp, iw);
+           break;
+         case g2_DoubleCoor:
+           dw=w*fabs(pd->a22);         /* to pd coordinates */
+           pd->ff[g2_SetLineWidth].fun(pd->pid, pd->pdp, dw);
+           break;
+       }
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Set dash
+ *
+ */
+void g2_set_dash_pd(g2_physical_device *pd, int N, double *dashes)
+{
+    int j;
+    double *dd=NULL;
+    int    *id=NULL;
+    
+    if(pd->ff[g2_SetDash].fun!=NULL) {
+       switch(pd->coor_type) {
+         case g2_IntCoor:
+           if(dashes!=NULL) {
+               id=g2_malloc(N*sizeof(int));
+               for(j=0;j<N;j++)
+                   id[j]=dtoi(dashes[j]*fabs(pd->a22));
+               pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, N, id);
+               g2_free(id);
+           } else
+               pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, 0, NULL);
+           break;
+         case g2_DoubleCoor:
+           if(dashes!=NULL) {
+               dd=g2_malloc(N*sizeof(double));
+               for(j=0;j<N;j++)
+                   dd[j]=dashes[j]*fabs(pd->a22);
+               pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, N, dd);
+               g2_free(dd);
+               break;
+           } else
+               pd->ff[g2_SetDash].fun(pd->pid, pd->pdp, 0, NULL);
+       }
+    } else {
+       /* emulate ... with .... */  
+    }
+}
+
+
+
+/*
+ *
+ * Query pointer position and button state
+ *
+ */
+void g2_query_pointer_pd(g2_physical_device *pd,
+                        double *x, double *y, unsigned int *button)
+{
+    int    ix, iy;
+    double dx, dy;
+
+    if(pd->ff[g2_QueryPointer].fun!=NULL) {
+       switch(pd->coor_type) {
+         case g2_IntCoor:
+           pd->ff[g2_QueryPointer].fun(pd->pid, pd->pdp,
+                                &ix, &iy, button);
+           g2_pdc2uc(pd, ix, iy, x, y);
+           break;
+         case g2_DoubleCoor:
+           pd->ff[g2_QueryPointer].fun(pd->pid, pd->pdp,
+                                       &dx, &dy, button);
+           g2_pdc2uc(pd, dx, dy, x, y);
+           break;
+       }
+    } else {
+       /* no emulation for query pointer */
+    }
+}
+
+
+/*
+ *
+ * Get low level handles
+ *
+ */
+void g2_get_pd_handles_pd(g2_physical_device *pd, void *handles[G2_PD_HANDLES_SIZE])
+{
+    if(pd->ff[g2_GetPDHandles].fun!=NULL) {
+       pd->ff[g2_GetPDHandles].fun(pd->pid, pd->pdp, handles);
+    } else {
+       /* no emulation for low level handles */
+    }
+}