#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/Xos.h>
#include <X11/Xresource.h>
#include <X11/keysym.h>

#define WAHR			1
#define FALSCH			0
#define NIEWAHR			2

#define STRICH			1
#define EINTRAG			0
#define EINTRAG_FLAG            4

#define SMALLBORDER		0
#define NOBORDER		1
#define NORMALBORDER		2

#define ZAHLEN		 	0
#define ZEICHEN			1

#define BOX		0
#define EINGABELISTE	1
#define EINGABE		2
#define ORDNERLISTE	3
#define TEXT	4
#define LISTE		5
#define KARTEI		6
#define LISTBUTTON	7
#define BUTTON		8
#define CHECKBOX	9
#define SLIDER_H	10
#define SLIDER_V	11
#define WINDOW		12		
#define BILD		13
#define KARTEI_ELEMENT  14
#define MENU            15
#define DATEILISTE      16


struct KarteiKarte_Element
{
 char Titel[100];
};

struct Menu
{
 long xx[30],xx1[30];
 char Titel[30][100];
 struct Menu_Element *Start[30];
 long maxX[30],maxY[30];
};


struct Menu_Element
{
 short int Flag;
 short int Disable;
 short int Selected;
 short int Art;       /* STRICH oder EINTRAG */
 struct Menu_Element *NextPtr;
 struct Menu_Element *Child;
 char Titel[100];
 int (* Proc)();
 long x,xx,y,yy;
};
 

struct Umfang
{
 long X,Y,dx,dy;
};

struct Element
{
 char *TextEintrag;
 long XOffset;
 short int Selected;
 struct Element *NextPtr;
 struct Element *PrevPtr;
};

struct Box
{
 unsigned char Titel[100];
};

struct Eingabeliste
{
 struct Objekt *ButtonPtr;
 struct Objekt *ListePtr;
 struct Objekt *EingabePtr;
};

struct Ordnerliste
{
 long h;
};

struct Text
{
unsigned char Titel[100];
};

struct Eingabe
{
 struct Objekt *Button_UP;
 unsigned char Titel[300];
 long wert;
 long Cursor;
 short int Art;
 unsigned char Suffix[10];
};

struct Liste
{
 struct Element *Elemente;
 struct Element *Start;
 short int SichtbarH,SichtbarV;
 struct Objekt *PtrH;
 struct Objekt *PtrV;  
 long  DeltaX;
 float Abstand;
 char SuchString[200];
 char Pfad[200];
 int (* Proc)();
};

struct Kartei
{
 struct Objekt *Kinder[50];
 short int Zeilen,Spalten,Aktuell;
 short int Tabelle[50]; 
 short int LastX,LastY; 
};

struct Listbutton
{
long h;
};

struct Bild
{
 int (* Proc)();
 short int SichtbarH,SichtbarV;
 struct Objekt *PtrH;
 struct Objekt *PtrV;
};

struct Button
{
 unsigned char Titel[100];
 XImage Bild;
 short int Bildnr;
 struct Menu_Element *MenuPtr;
};

struct Checkbox
{
  long value;
  unsigned char Titel[100];
};

struct SliderH
{
long max,wert,min;
struct Objekt *Ptr_UP;
struct Objekt *Ptr_DOWN;
};

struct SliderV
{
 long max,min,wert;
 struct Objekt *Ptr_UP;
 struct Objekt *Ptr_DOWN;
};

struct Objekt
{
 struct Umfang  Size;
 void      	*Pointer;
 short int  	Objekt_Typ;
 short int  	Sichtbar;
 short int	Focus;
 struct Objekt  *Kind;
 struct Objekt  *Bruder;
 struct Objekt  *Vater;
 GC		gc;
 Region		region;
 int (* Proc)();
 struct FokusObjektListe *Fokusliste;
};

struct FokusObjektListe
{
 struct FokusObjektListe *NextPtr;
 struct Objekt *FokusObjekt;
};

struct MyWindow
{
 short int     WindowTyp;        	/* WINDOW_XXXX Werte			*/
 struct Umfang InnenSize;
 short int     Sichtbar;		/* TRUE oder FALSE			*/
 struct Slider_Horizontal *SH;		/* Zeigt auf den Hor.-Slider		*/
 struct Slider_Vertikal   *SV;		/* dto. f. Vert.			*/
 struct Bild   *BildFeld;		/* Ein Bildfeld das zoomt		*/
 struct Objekt *Ptr_Button1;
 long dx1;
 short int Typ;
 char  	       Titel[100];			/* Titel des Windows			*/
};

void Pause();
struct Menu_Element *CreateMenuEintrag();
struct Objekt *FindFocus();
void SetFokusListe();
void AddListElement();
void SetMaxSize();
void BerechneFensterCliping();
void InstallWindowsToolkit();
void SetObjektSichtbar();
void WechsleKarteiKarte();
void SetFocus();
void Male_Objekt();
void LoescheFokus();
void TakeControl();
struct Objekt *CreateButton();
struct Objekt *CreateText();
struct Objekt *CreateCheckbox();
struct Objekt *CreateBox();
struct Objekt *CreateKartei();
struct Objekt *CreateEingabe();
struct Objekt *CreateEingabeListe();
struct Objekt *CreateSliderH();
struct Objekt *CreateSliderV();
struct Objekt *CreateListbox();
struct Objekt *CreateDateiListbox();
struct Objekt *CreateOrdnerListbox();
struct Objekt *CreateBild();
struct Objekt *CreateWindow();
struct Objekt *CreateMenu();
void SetKarteiKarteText();
char *GetString();
long GetValue();
void PutValue();
void PutString();
void ClearListe();
void SetPath();
char *GetSelected();
char *GetPath();
void SetSuchString();
void SetWindow();
void TakeControlUntil();
void CheckRepaintArea();
