/*----------------------------------------------------------------------*/
/* Anbindung der gemeinsamen Programmschnittstelle an OS/2              */
/*----------------------------------------------------------------------*/
#ifndef TRUE
#define TRUE    1
#define FALSE   0
#endif

short   ur_intel_mode( void );
void    ur_help(char* keyword);

short   ur_init(char* progname);
void    ur_exit(void);
short   ur_res_init(void);
void    ur_main_loop(void);

short   ur_menue_init(void (proc(short)));

long    ur_dlg_open(long (proc(long,short,long,long,void**)),long id,short type,char *titel,long flags);
void    ur_modal_loop(long hand);
long    ur_dlg_default(long hand,short msg,long p1,long p2,void **data);
long    ur_dlg_default_leer(long hand,short msg,long p1,long p2,void **data);

void    ur_dlg_set_text(long hand,long id,char *str);
void    ur_dlg_query_text(long hand,long id,char *str);

void    ur_dlg_set_select(long hand,long id,short state);
short   ur_dlg_query_select(long hand,long id);

void	ur_dlg_clr_lbox(long hand,long id);
void	ur_dlg_insert_lbox(long hand,long id,char *text);
short	ur_dlg_query_lbox(long hand,long id);
void 	ur_dlg_query_ltext(long hand,long id,long index,char *str);
void	ur_dlg_begin_lbox(long hand,long id);
void	ur_dlg_end_lbox(long hand,long id);

void    ur_dlg_set_top(long hand);
void    ur_dlg_set_headline(long hand, char *text);

void    ur_draw_text(long hand,long x,long y,char *str);
void    ur_draw_line(long hand,long x,long y,long x1, long y1);
void    ur_draw_rect(long hand,long x,long y,long w,long h,short filltype);
void    ur_draw_circle(long hand,long x,long y,long r,short alfa1,short alfa2);
void    ur_draw_invert(long hand,long x,long y,long w,long h);
void    ur_draw_color(long hand,short color);
void    ur_draw_type(long hand,short type);
void    ur_draw_plane(long hand,long x,long y,long words,long lines,void *data);

long    ur_send_msg(long hand,short msg,long p1,long p2);

void    ur_query_winsize(long hand, short *x,short *y,short *w,short *h);
void    ur_query_framesize(long hand, short *x,short *y,short *w,short *h);
void    ur_set_frame(long hand, short x,short y,short w,short h);
void    ur_set_vsize(long hand,long x,long y);
void    ur_set_vpos(long hand,long x,long y);
void    ur_query_vpos(long hand,long *x,long *y);
void    ur_set_default_framesize(short x,short y,short w,short h);
void    ur_set_default_dlgpos(short x,short y);

long    ur_list_index(long hand);

void    ur_redraw_all(long hand);
void    ur_redraw_region(long hand,long x,long y,long w,long h);

void    ur_timer_start(long hand,short nummer,long msec);
void    ur_timer_stop(long hand,short nummer);
void    ur_timer_indi(long msec,void (proc(void)) );
void    ur_timer_indi_stop(void (proc(void)) );

short   ur_msg(char *msg,short art,short icon);
short   ur_get_file(char *titel,char *pfad, char *name);

short   ur_find_first(char *pfad,char *gefunden);
short   ur_find_next(char *gefunden);

/*----------------------------------------------------------------------*/
/* x_pos ist die Position des Sliders x_len ist die sichtbare laenge    */
/*----------------------------------------------------------------------*/
void    ur_set_slider_x(long hand, long x_pos, long x_len);
void    ur_set_slider_y(long hand, long y_pos, long y_len);

typedef struct
  {
  long  x;
  long  y;
  } point_typ;
  
/*----------------------------------------------------------------------*/
/* Art des zu ”ffnenden Fensters                                        */
/*----------------------------------------------------------------------*/
#define         UR_TYPE_DIALOG          1
#define         UR_TYPE_WINDOW          2
#define         UR_TYPE_LIST            3

/*----------------------------------------------------------------------*/
/* Flags fr das Fenster                                                */
/*----------------------------------------------------------------------*/
#define         UR_FLAGS_NONE           0
#define         UR_FLAGS_MODAL          1      /* Modales Fenster       */
#define         UR_FLAGS_CURSOR         2      /* Cursor wird von appl. gezeichnet */
#define			UR_FLAGS_TOOLBOX		4	   /* Toolbox wird nicht getoppt	*/

/*----------------------------------------------------------------------*/
/* Farben zum Zeichnen                                                  */
/*----------------------------------------------------------------------*/
#define         UR_COLOR_WHITE          0
#define         UR_COLOR_BLACK          1

/*----------------------------------------------------------------------*/
/* Linientypen                                                          */
/*----------------------------------------------------------------------*/
#define         UR_TYPE_BREIT_DURCH     0
#define         UR_TYPE_BREIT_PUNKT     1
#define         UR_TYPE_BREIT_STRICH    2
#define         UR_TYPE_BREIT_STRIPU    3
#define         UR_TYPE_SCHMAL_DURCH     4
#define         UR_TYPE_SCHMAL_PUNKT     5
#define         UR_TYPE_SCHMAL_STRICH    6
#define         UR_TYPE_SCHMAL_STRIPU    7

/*----------------------------------------------------------------------*/
/* Message Box Defines                                                  */
/*----------------------------------------------------------------------*/
#define                 UR_MSG_OK       1       /* nur OK Button        */
#define                 UR_MSG_CANCEL   2       /* Cancel Button        */
#define                 UR_MSG_OKCANCEL 3       /* Beide Kn”pfe         */

#define                 UR_MSG_KEINS    0       /* Kein Icon Darstellen */
#define                 UR_MSG_FRAG     2       /* Fragezeichen         */
#define                 UR_MSG_STOP     3       /* Stopschild           */

short ur_msg(char *msg,short art,short icon);

/*----------------------------------------------------------------------*/
/* Definition der Messages an eine Client Prozedur                      */
/*----------------------------------------------------------------------*/

/*----------------------------------------------------------------------*/
/* Diese Message dient zum Neuzeichnen des Fensters. Alle rahmenbed.    */
/* sind erfllt ; mit den ur_draw_.. Funktionen kann dann gezeichnet    */
/* werden.                                                              */
/*----------------------------------------------------------------------*/
#define         UR_WM_PAINT     1

/*----------------------------------------------------------------------*/
/* Create wird nach erzeugen der Dialogbox bzw des Fensters aufgerufen  */
/* hier k”nnen Daten initialisiert werden                               */
/*----------------------------------------------------------------------*/
#define         UR_WM_CREATE    2

/*----------------------------------------------------------------------*/
/* Nach einem Mausklick auf ein Kontrollelement wird WM_COMMAND gesendet*/
/* p1 = ID des gedrckten Knopfes                                       */
/*----------------------------------------------------------------------*/
#define         UR_WM_COMMAND   3

/*----------------------------------------------------------------------*/
/* destroy passiert, bevor das Fenster geschossen wird                  */
/* evtl freigeben von Speicher ...                                      */
/*----------------------------------------------------------------------*/
#define         UR_WM_DESTROY   4

/*----------------------------------------------------------------------*/
/* char passiert, wenn eine Taste gedrueckt wurde                       */
/* p1 = ascii Code der Taste, mit vordefinierten Funktionscodes         */
/*----------------------------------------------------------------------*/
#define         UR_WM_CHAR      5

/*----------------------------------------------------------------------*/
/* mouse passiert, wenn eine MausTaste gedrueckt wurde                  */
/* p1 = Zeiger auf eine Struktur aus zwei longs  (polong_typ)           */
/* p2 = anzahl der Mausklicks                                           */
/*      1 = klick liks 2 = 2mal links  11 = rechts 12 = 2 mal rechts    */
/*----------------------------------------------------------------------*/
#define         UR_WM_MOUSE     6

/*----------------------------------------------------------------------*/
/* move passiert, wenn der Mauszeiger bewegt wird,und das Flag CURSOR   */
/* gesetzt ist.                                                         */
/* p1 = x pos des Mauszeigers                                           */
/* p2 = y pos des Mauszeigers                                           */
/*----------------------------------------------------------------------*/
#define         UR_WM_MOVE      7

/*----------------------------------------------------------------------*/
/* Timer passiert, wenn ein timer abgelaufen ist                        */
/* p1 = Nummer des Timers, der abgelaufen ist                           */
/*----------------------------------------------------------------------*/
#define         UR_WM_TIMER      8

/*----------------------------------------------------------------------*/
/* Diese Message wird dann gesendet, wenn ein Fenster aktiviert wird    */
/* entweder durch anklicken oder durch schliessen eines anderen Fensters*/
/* hier kann das aktuelle Arbeitsfenster bestimmt werden                */
/*----------------------------------------------------------------------*/
#define         UR_WM_TOP        9

/*----------------------------------------------------------------------*/
/* Diese Message zeigt der Clientprozedur an, daž der sichtbare 		*/
/* Bildausschnitt ver„ndert wurde. die neuen Abmessungen k”nnen			*/
/* dann erfragt werden (Ursache : Slider, oder Size)					*/
/*----------------------------------------------------------------------*/
#define         UR_WM_VIEW        10

/*----------------------------------------------------------------------*/
/* die folgenden Events geh”ren zu einem Listfenster                    */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* Abfragen des selektierten Eintrages                                  */
/*----------------------------------------------------------------------*/

/* select wird durch Doppelklick auf einen Eintrag ausgefhrt           */
/* p1 = Selektiertes Listenelement                                      */
/*----------------------------------------------------------------------*/
#define                 UR_WM_LIST_SELECT       100

/*----------------------------------------------------------------------*/
/* read liest den angegebenen Listeneintrag ein                         */
/* p1 = gefragtes Listenelement                                         */
/* p2 = Zeiger auf einen 255 Zeichen langen String fr den Text         */
/*----------------------------------------------------------------------*/
#define                 UR_WM_LIST_READ         101

/*----------------------------------------------------------------------*/
/* size fragt die L„nge der Liste an                                    */
/* p1 = gefragtes Listenelement                                         */
/* returnwert = l„nge der Liste in Zeilen                               */
/*----------------------------------------------------------------------*/
#define                 UR_WM_LIST_SIZE         102

