#include <stdio.h>
#include "libsx.h"
#include "globals.h"
#include "crosshair.h"
#include "kraftwerk.h"
#include "graph.h"

Widget meshsizeWindow;
Widget cancelB, doneB;
Widget textEntry, textLabel, infotext;

void meshError(int ierr)
{
/*
*     TYPE                  IERR   ERROR
*
*     FILE HANDLING         1      CANNOT OPEN INPUT FILE
*          -"-              2      CANNOT OPEN OUTPUT FILE
*          -"-              3      CANNOT CLOSE INPUT FILE
*          -"-              4      ATTEMPT TO OPEN TOO MANY FILES
*          -"-              5      FAILED TO READ FROM INPUT FILE
*          -"-              6      CANNOT OPEN AUXILIARY INPUT FILE
*          -"-              7      FAILED TO READ FROM POINT SCRATCH FILE
*          -"-              8      FAILED TO READ FROM SEGMENT SCRATCH FILE
*          -"-              9      FAILED TO READ FROM BOUNDARY SCRATCH FILE
*
*     MEMORY HANDLING       11     PRIMARY MEMORY TOO SMALL
*          -"-              12     MAXIMUM NUMBER OF ELEMENTS EXCEEDED
*
*     COMMAND HANDLING      101    UNKNOWN COMMAND
*          -"-              102    TOO FEW BOUNDARIES
*          -"-              103    NON-POSITIVE POINT NUMBER
*          -"-              104    TOO FEW POINTS TO DEFINE SEGMENT
*          -"-              105    TOO FEW SEGMENTS TO DEFINE BOUNDARY
*          -"-              106    NO POINTS HAVE BEEN DEFINED
*          -"-              107    TOO FEW SEGMENTS HAVE BEEN DEFINED
*          -"-              108    NO BOUNDARY HAS BEEN DEFINED
*          -"-              109    DUPLICATE SEGMENT NAME
*          -"-              110    DUPLICATE BOUNDARY NAME
*          -"-              111    A BOUNDARY HAS NOT BEEN DEFINED
*          -"-              112    A SEGMENT HAS NOT BEEN DEFINED
*          -"-              113    SEGMENTS DO NOT FORM AN UNBROKEN CHAIN
*          -"-              114    NO MEHSIZE HAS BEEN GIVEN
*          -"-              115    NEGATIVE MEHSIZE HAS BEEN GIVEN
* "
*
*     MESH GENERATION       9000   MESH TANGLED, BUG!!
*/
  if(ierr > 0 & ierr < 10)
   errorHandler("The temporary file created by femlab could not be read");
  else if(ierr == 11)
    errorHandler("The memory is exhausted");
  else if(ierr == 12)
    errorHandler("The maximum number of elements is exceeded");
  else if(ierr == 9000)
    errorHandler("You have encountered a bug in the mesh generator");
  else if(ierr == 114)
    errorHandler("You have not specified a meshsize");
  else{
    errorHandler("You have encountered a bug in the mesh generator");
  }
}
void meshMouseMotion(Widget w, int x, int y, void *data)
{
  crossHair(x, y);
}

void meshMouseDown(Widget w, int button, int x, int y, void *data)
{
  myDrawText(GetStringEntry(textEntry), x+4, y-8);
  sscanf(GetStringEntry(textEntry),"%f",&h[ih]);
  myDrawFilledBox(x-2,y-2,4,4);
  hx[ih] = x;
  hy[ih] = y;
  ih++;
}

void cancel( Widget w, void *data)
{
  deleteCrossHair();
  SetMouseMotionCB(drawWindow, NULL);    
  SetButtonDownCB(drawWindow, NULL);
  CloseWindow();
}
void done( Widget w, void *data)
{
  int hh = 0, ww = 0;
  deleteCrossHair();
  SetMouseMotionCB(drawWindow, NULL);    
  SetButtonDownCB(drawWindow, NULL);
  CloseWindow();
  state = HAVE_MESHSIZE;
  redisplay(w, hh, ww, data);
}
void meshsize()
{
  Widget form = NULL;
  int hh = 0, ww = 0, *data = NULL;
  setAction(NORMAL);
  state = HAVE_BOUNDARY;
  redisplay(form, hh, ww, data);

  ih = 0;
  meshsizeWindow = MakeWindow("Meshsize", SAME_DISPLAY,  NONEXCLUSIVE_WINDOW);
  form = MakeForm(TOP_LEVEL_FORM, NO_CARE, NULL, NO_CARE, NULL);
  textLabel = MakeLabel("Input meshsize:");
  infotext = MakeLabel("Click on at least one point in the domain");
  textEntry = MakeStringEntry("0.1", 100, NULL, NULL);
  doneB  = MakeButton("Done",done, NULL);
  SetWidgetPos(textEntry,   PLACE_RIGHT, textLabel,    NO_CARE, NULL);
  SetWidgetPos(infotext,   PLACE_UNDER, textLabel,    NO_CARE, NULL);
  SetWidgetPos(doneB,   PLACE_UNDER, infotext,NO_CARE, NULL);

  ShowDisplay();

  SetMouseMotionCB(drawWindow, meshMouseMotion);    
  SetButtonDownCB(drawWindow, meshMouseDown);


/*  Beep(); */
}


syntax highlighted by Code2HTML, v. 0.9.1