#include <stdio.h>

#include "export.h"

/**************************************************************************/
static void
free_callback(UCHAR *addr)
 {
 printf("IDL released(%u)\r\n", addr);
 }

/**************************************************************************/
void
idl_init_ (int *options, int *i_ret)
 {
 int argc;
 char *argv;

 argc = 0;
 argv = NULL;
 *i_ret = IDL_Init (*options, &argc, &argv);
 }

/**************************************************************************/
void
idl_importnamedarray_ (float Y1[], float Y2[], float Y3[], float Y4[],  \
   float Y5[], float XP[], long *i_ret)
        {
 int ii;

 static char *cmds2[] = {"a = widget_base()",
  "b = widget_button(a, value='Press When Done', \
  xsize=300, ysize=200)",
  "widget_control,/realize, a",
  "dummy = widget_event(a)",
  "widget_control,/destroy, a" };

 static char *cmds[] = { "SET_PLOT, 'PS'",
        "DEVICE, FILENAME='align.ps'",
        "DEVICE,/INCHES,YOFFSET=2",
      };
 

 IDL_VPTR vY1;
 IDL_VPTR vY2;
 IDL_VPTR vY3;
 IDL_VPTR vY4;
 IDL_VPTR vY5;
 IDL_VPTR vXP;
 IDL_STRING my_env;
 IDL_STRING my_idl;
 IDL_STRING my_shell;

 IDL_LONG dim[IDL_MAX_ARRAY_DIM];

 dim[0] = 80;

 IDL_Execute(sizeof(cmds)/sizeof(char *), cmds);

 for (ii = 0; ii < 10; ii++)
  {
  printf("XP[%d]= %2f\n", ii, XP[ii]);
  }

  printf("\n");

 for (ii = 0; ii < 10; ii++)
  {
  printf("Y1[%d]= %2f\n", ii, Y1[ii]);
  }

 vY1 = IDL_ImportNamedArray("idl_Y1", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) Y1, free_callback, (void *) 0);

 vY2 = IDL_ImportNamedArray("idl_Y2", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) Y2, free_callback, (void *) 0);

 vY3 = IDL_ImportNamedArray("idl_Y3", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) Y3, free_callback, (void *) 0);

 vY4 = IDL_ImportNamedArray("idl_Y4", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) Y4, free_callback, (void *) 0);

 vY5 = IDL_ImportNamedArray("idl_Y5", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) Y5, free_callback, (void *) 0);

 vXP = IDL_ImportNamedArray("idl_XP", 1, dim, IDL_TYP_FLOAT,
  (UCHAR *) XP, free_callback, (void *) 0);

 IDL_ExecuteStr("PLOT, idl_XP, idl_Y1, \
  XTITLE = 'INCIDENT ENERGY (EV)', \
  YTITLE = 'T TO V EFFICIENCY', \
  PSYM = 0, \
  XSTYLE = 1, XRANGE = [0,8], \
  YSTYLE = 1, YRANGE = [0,1], \
  XTICKS = 4, XMINOR = 10, \
  YTICKS = 1, YMINOR = 10, \
  CHARSIZE = 1");

 IDL_ExecuteStr("OPLOT, idl_XP, idl_Y2");
 IDL_ExecuteStr("OPLOT, idl_XP, idl_Y3");
 IDL_ExecuteStr("OPLOT, idl_XP, idl_Y4");
 IDL_ExecuteStr("OPLOT, idl_XP, idl_Y5");

 IDL_Execute(sizeof(cmds2)/sizeof(char *), cmds2);

 (void) IDL_ExecuteStr("my_env = GETENV(LM_LICENSE_FILE)");
 (void) IDL_ExecuteStr("my_idl = GETENV(IDL_DIR)");
 (void) IDL_ExecuteStr("my_shell = GETENV(SHELL)");
 (void) IDL_ExecuteStr("print, my_env");
 (void) IDL_ExecuteStr("print, my_idl");
 (void) IDL_ExecuteStr("print, my_shell");

 *i_ret = (long) vY5;

 }
 

/**************************************************************************/
void
idl_cleanup_ (int *just_cleanup, long *i_ret)
 {
 printf("IDL is cleaning up here\n");
 *i_ret = IDL_Cleanup (*just_cleanup);
 }