/*
   gcc -I/usr/X11R6/include -L/usr/X11R6/lib lorentz.c -lX11
   gcc -I/opt/X11/include -L/opt/X11/lib lorentz.c -lX11
 */
#include <stdio.h>
#include <math.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <unistd.h>

int lorentz(Display *Glib_d,Window Glib_w,GC Glib_gc);
main() {
  Display *Glib_d;
  int Glib_s;
  Window Glib_w;
  GC Glib_gc;
  XSetWindowAttributes att;

  Glib_d = XOpenDisplay(NULL);
  Glib_s = DefaultScreen(Glib_d);
  Glib_gc = DefaultGC(Glib_d,Glib_s);
  Glib_w = XCreateSimpleWindow(Glib_d,RootWindow(Glib_d,Glib_s),0,0,
                               400,400,2,BlackPixel(Glib_d,Glib_s),WhitePixel(Glib_d,Glib_s));

  att.override_redirect = 1;
  XChangeWindowAttributes(Glib_d,Glib_w,CWOverrideRedirect, &att);
  XMapWindow(Glib_d,Glib_w);

  lorentz(Glib_d,Glib_w,Glib_gc);

  XFlush(Glib_d);
  sleep(100);
  XCloseDisplay(Glib_d);
}


int lorentz(Display *Glib_d,Window Glib_w,GC Glib_gc)
{
  double A,B,C,P1,P2,P3,Dt,T;
  double Q1,Q2,Q3;
  int x,y;

  A=10; B=20; C=2.66;
  P1=0; P2 = 3; P3 = 0;
  Dt = 0.004; T = 0;
  while (T <50) {
      Q1=P1+Dt*(-A*P1+A*P2);
      Q2=P2+Dt*(-P1*P3+B*P1-P2);
      Q3=P3+Dt*(P1*P2-C*P3);
      printf("%lf,%lf\n",Q1,Q2);
      x = Q1*10.0+200;
      y = Q2*10.0+200;
      XDrawPoint(Glib_d,Glib_w,Glib_gc,x,y);
//	  if (((int)T) % 2 == 0) XFlush(Glib_d);
      XFlush(Glib_d);
      usleep(20);  /* wait of 20 micro seconds */
      T=T+Dt;
      P1=Q1; P2=Q2; P3=Q3;
  }
}










