typedef enum {TOPLEFT,TOP,TOPRIGHT,LEFT,RIGHT,BOTTOMLEFT,BOTTOM,BOTTOMRIGHT}
    xDirection;
typedef enum {NOSHD,CAST,OPAQUE,TRANSPARENT} xShadows;
typedef enum {NOOUT,SQUARE,ROUNDED,ANTIALIAS} xOutlines;

typedef short int Direction;
typedef short int Shadows;
typedef short int Outlines;

struct PrefsInfo {
   short int Version;
   Direction Light;
   Shadows ShadowType;
   short int ShadowDist;
   Outlines OutlineType;
   short int OutlineDist;
   UWORD ForePen,
   ShadowPen,
   OutlinePen,
   EfxPen1,
   EfxPen2,
   EfxPen3,
   EfxPen4,
   EfxPen5,
   EfxPen6;
   short int TextSpacing;
   UWORD TextStyle;
   char TextStr[132];
   UWORD Palette[32];
};

struct DLData {
   UWORD Back,Fore;
};

struct DisplayList {
   UWORD BackRGB;
   short int ForePen,Rows;
   struct DLData Data[1];
};

struct EfxElem {
   short Pen,X,Y;
   };

struct EfxList {
   short Elems;
   struct EfxElem Efx[1];
};

#define ALLICONS 0
#define SYSICONS 1
#define GFXICONS 2
#define NOICONS 3

#define CURRENT 0
#define INTERNAL 1
#define EXTERNAL 2
#define FONTS 3
#define SCREENS 4
#define BRUSHES 5
#define PALETTES 6
#define PATTERNS 7
#define EFFECTS 8
#define SCRIPTS 9
#define QWIKLOAD 10

struct IFFIOInfo {
   struct ColorMap *CMap;
   struct BitMap *BMap;
   struct DisplayList *DList;
   short LoadDList;
   };

struct TP_Message {
   struct SignalSemaphore TP_SigSemaphore;
   APTR TP_SYSTEMRSV;
   struct Screen *TP_Sp;
   struct Window *TP_Wp;
   struct PrefsInfo *TP_Prefs;
   struct DisplayList *TP_DisplayList;
   struct BitMap *TP_Brush;
   short int TP_BrushWidth,TP_BrushHeight;
   struct BitMap *TP_Pattern;
   struct EfxList *TP_EfxList;
   UBYTE TP_SaveIcons;
   UBYTE TP_Drawer;
   VOID (*TP_ReturnDrawer)(),(*TP_FileReqRd)(),(*TP_FileReqWr)();
   char *TP_PathBuff;
   VOID (*TP_ErrNotice)();
   char *TP_ErrMessage;
   VOID (*TP_Query)();
   char *TP_QueryMessage;
   short int TP_QueryBool;
   VOID (*TP_IFFLoadRtn)(),(*TP_IFFSaveRtn)();
   struct IFFIOInfo *TP_IFFIOInfo;
   long TP_RESERVED[8];
};

BOOL TPFound;
struct TP_Message *TP_Message;

CheckForTP()
{
struct SignalSemaphore *TempSig;

   Forbid();
   if (TempSig = FindSemaphore("TP_ExtMsg"))
      if (AttemptSemaphore(TempSig))
         {
         Permit();
         TP_Message = (struct TP_Message *) TempSig;
         return(TRUE);
         }
   Permit();
   TP_Message = NULL;
   return(FALSE);
}

#define ReleaseTPMsg() {if (TPFound) ReleaseSemaphore((struct Signal\
Semaphore *) TP_Message);}

/*
    TPFound = CheckForTP();
      .
      .
      .
    ReleaseTPMsg();
*/
