//#include "..\..\..\..\units\source\bastypes.h"

#ifdef WIN32
/*###########################################################################
#                                                                           #
#     W I N   3 2                                                           #
#                                                                           #
###########################################################################*/

#define _Seg16
#define _Optlink
#define _Packed
#define far
#define APIENTRY16
#define IS_32

#include <windows.h>
#include <io.h>
#include <process.h>

#define Thread_Id_Typ HANDLE
#define HMTX CRITICAL_SECTION

typedef struct _FileInfoTyp
{
  long               hfile;           // WIN spezifisch !!!
  struct _finddata_t FindBuffer;      // WIN spezifisch !!!
  unsigned long      FileSize;        // OS/2 und WIN und Unix
  char               FileName[200];   // OS/2 und WIN und Unix
} FileInfoTyp;

#endif

#ifdef OS2
/*###########################################################################
#                                                                           #
#     O S / 2                                                               #
#                                                                           #
###########################################################################*/

#define INCL_DOSPROCESS
#define INCL_DOS

#include <os2.h>
#include <stdlib.h>
#include <string.h>

#define os2_stack_of_thread 64*1024
#define Thread_Id_Typ TID
//#define HMTX unsigned long

typedef struct _FileInfoTyp
{
  HDIR           FindHandle;      // OS/2 spezifisch !!!
  FILEFINDBUF3   FindBuffer;      // OS/2 spezifisch !!!
  unsigned long  FindCount;       // OS/2 spezifisch !!!
//  unsigned long  FileSize;        // OS/2 und WIN und Unix
  char           FileName[200];   // OS/2 und WIN und Unix
} FileInfoTyp;

#endif

#ifdef UNIX

/*###########################################################################
#                                                                           #
#     U N I X                                                               #
#                                                                           #
###########################################################################*/

#include <glob.h>
#include <pthread.h>

#define _Seg16
#define _Optlink
#define _Packed
#define far
#define APIENTRY16
#define IS_32


#define Thread_Id_Typ pthread_t //problem
#define HMTX pthread_mutex_t //problem

typedef struct _FileInfoTyp
{
  glob_t         GlobInfo;        // Unix spezifisch !!!
  int            cnt;             // Unix spezifisch !!!
//  unsigned long  FileSize;        // OS/2 und WIN und Unix
  char           FileName[200];   // OS/2 und WIN und Unix
} FileInfoTyp;

#endif


/*###########################################################################
#                                                                           #
#     a l l g e m e i n                                                     #
#                                                                           #
###########################################################################*/

void          OsSleep           (unsigned long msec);
void          OsBoot            (void);

Thread_Id_Typ OsStartThread     (void(*startaddr)(void *));
void          OsStopThread      (Thread_Id_Typ thread_id);


short         OsFindFirst       (FileInfoTyp *FileInfo, char *searchmask);
short         OsFindNext        (FileInfoTyp *FileInfo);
short         OsFindClose       (FileInfoTyp *FileInfo);

void          OSCreateMutexSem  (char *v1, HMTX *sem, unsigned long d2, unsigned long d3);
void          OSCloseMutexSem   (HMTX *sem);
void          OSRequestMutexSem (HMTX *sem, long d1);
void          OSReleaseMutexSem (HMTX *sem);

void          OSBeep            (unsigned long frequency, unsigned long duration);
void          OSSetPriority     (unsigned long class);
void          OSProcessAffinity (unsigned long affinity);

char          Os_kbhit          (void);
char          Os_getch          (void);
tU32          OsGetTickCount    (void);
void          OsMkDir           (char *dirpath);

