/****************************************************************************/
/* Includes                                                                 */
/****************************************************************************/

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

#include <exec/memory.h>
#include <prefs/prefhdr.h>
#include <datatypes/pictureclass.h>
#include <libraries/locale.h>
#include <libraries/asl.h>
#include <libraries/mui.h>

#include <clib/exec_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <clib/utility_protos.h>
#include <clib/dos_protos.h>
#include <clib/locale_protos.h>
#include <clib/muimaster_protos.h>

#ifdef __SASC
#include <pragmas/exec_pragmas.h>
#include <pragmas/graphics_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/utility_pragmas.h>
#include <pragmas/dos_pragmas.h>
#include <pragmas/locale_pragmas.h>
#include <pragmas/muimaster_pragmas.h>
#endif

#define CATCOMP_NUMBERS
#define CATCOMP_ARRAY
#include "psi_locale.h"

#define USE_PSI_SIZES_BODY
#define USE_PSI_SIZES_COLORS
#include "psi_sizes.h"

#define USE_PSI_COLORS_BODY
#include "psi_colors.h"

#define USE_PSI_FREQS_BODY
#include "psi_freqs.h"



/****************************************************************************/
/* Compiler Stuff                                                           */
/****************************************************************************/

#ifdef _DCC
#define REG(x) __ ## x
#define ASM
#define SAVEDS __geta4
#else
#define REG(x) register __ ## x
#define ASM    __asm
#define SAVEDS __saveds
#endif



/****************************************************************************/
/* Some Definitions                                                         */
/****************************************************************************/

#define MUISERIALNR_STUNTZI 1
#define TAGBASE_STUNTZI (TAG_USER | ( MUISERIALNR_STUNTZI << 16))

#define MUIM_PenContainer_Toggle      (TAGBASE_STUNTZI | 0x1000)
#define MUIM_PenContainer_Update      (TAGBASE_STUNTZI | 0x1001)
#define MUIA_PenContainer_RGB         (TAGBASE_STUNTZI | 0x1002)
#define MUIA_PenContainer_Originator  (TAGBASE_STUNTZI | 0x1003)

#define MUIA_DispIDinfo_ID            (TAGBASE_STUNTZI | 0x1010)

#define MUIA_DispIDlist_CurrentID     (TAGBASE_STUNTZI | 0x1020)
#define MUIA_DispIDlist_Quiet         (TAGBASE_STUNTZI | 0x1021)
#define MUIM_DispIDlist_Change        (TAGBASE_STUNTZI | 0x1022)

#define MUIM_EditPanel_SetScreen      (TAGBASE_STUNTZI | 0x1030)
#define MUIM_EditPanel_GetScreen      (TAGBASE_STUNTZI | 0x1031)
#define MUIM_EditPanel_Update         (TAGBASE_STUNTZI | 0x1032)
#define MUIM_EditPanel_AddPot         (TAGBASE_STUNTZI | 0x1033)
#define MUIM_EditPanel_RemPot         (TAGBASE_STUNTZI | 0x1034)
#define MUIM_EditPanel_DefColors      (TAGBASE_STUNTZI | 0x1035)
#define MUIM_EditPanel_ToggleForeign  (TAGBASE_STUNTZI | 0x1036)

#define MUIA_EditWindow_Title         (TAGBASE_STUNTZI | 0x1040)
#define MUIA_EditWindow_Originator    (TAGBASE_STUNTZI | 0x1041)
#define MUIM_EditWindow_Close         (TAGBASE_STUNTZI | 0x1042)

#define MUIM_ScreenList_Save          (TAGBASE_STUNTZI | 0x1050)
#define MUIM_ScreenList_Load          (TAGBASE_STUNTZI | 0x1051)
#define MUIM_ScreenList_Find          (TAGBASE_STUNTZI | 0x1052)

#define MUIM_ScreenPanel_Create       (TAGBASE_STUNTZI | 0x1060)
#define MUIM_ScreenPanel_Copy         (TAGBASE_STUNTZI | 0x1061)
#define MUIM_ScreenPanel_Delete       (TAGBASE_STUNTZI | 0x1062)
#define MUIM_ScreenPanel_Edit         (TAGBASE_STUNTZI | 0x1063)
#define MUIM_ScreenPanel_Finish       (TAGBASE_STUNTZI | 0x1064)
#define MUIM_ScreenPanel_CloseWindows (TAGBASE_STUNTZI | 0x1065)
#define MUIM_ScreenPanel_SetStates    (TAGBASE_STUNTZI | 0x1066)
#define MUIM_ScreenPanel_Open         (TAGBASE_STUNTZI | 0x1067)
#define MUIM_ScreenPanel_Close        (TAGBASE_STUNTZI | 0x1068)
#define MUIM_ScreenPanel_Jump         (TAGBASE_STUNTZI | 0x1069)
#define MUIM_ScreenPanel_Update       (TAGBASE_STUNTZI | 0x106a)

#define MUIM_MainWindow_Finish        (TAGBASE_STUNTZI | 0x1070)
#define MUIM_MainWindow_About         (TAGBASE_STUNTZI | 0x1071)
#define MUIM_MainWindow_Restore       (TAGBASE_STUNTZI | 0x1072)
#define MUIM_MainWindow_Open          (TAGBASE_STUNTZI | 0x1073)
#define MUIM_MainWindow_SaveAs        (TAGBASE_STUNTZI | 0x1074)

#define MUIM_MUIPenEdit_NewPen        (TAGBASE_STUNTZI | 0x1080)
#define MUIM_MUIPenEdit_NewSpec       (TAGBASE_STUNTZI | 0x1081)
#define MUIA_MUIPenEdit_Array         (TAGBASE_STUNTZI | 0x1082)

struct MUIP_EditPanel_SetScreen { ULONG MethodID; struct MUI_PubScreenDesc *desc; };
struct MUIP_EditPanel_GetScreen { ULONG MethodID; struct MUI_PubScreenDesc *desc; };
struct MUIP_EditPanel_Update    { ULONG MethodID; LONG level; };
struct MUIP_EditPanel_AddPot    { ULONG MethodID; Object *group; };
struct MUIP_EditPanel_RemPot    { ULONG MethodID; Object *pot; };
struct MUIP_EditPanel_DefColors { ULONG MethodID; LONG nr; };

struct MUIP_ScreenList_Save     { ULONG MethodID; char *name; };
struct MUIP_ScreenList_Load     { ULONG MethodID; char *name; LONG clear; };
struct MUIP_ScreenList_Find     { ULONG MethodID; char *name; struct MUI_PubScreenDesc **desc; };

struct MUIP_ScreenPanel_Finish  { ULONG MethodID; Object *win; LONG ok; };

struct MUIP_MainWindow_Finish   { ULONG MethodID; LONG level; };
struct MUIP_MainWindow_Restore  { ULONG MethodID; LONG envarc; };
struct MUIP_MainWindow_Open     { ULONG MethodID; LONG append; };

#define RectangleWidth(r)  ((r).MaxX-(r).MinX+1)
#define RectangleHeight(r) ((r).MaxY-(r).MinY+1)

#define SYSPEN_OFFSET   1
#define MUIPEN_OFFSET   1

#define ForEntries(list,entry,succ) for (entry=(APTR)((struct Node *)(((struct List *)list)->lh_Head));succ=(APTR)((struct Node *)entry)->ln_Succ;entry=(APTR)succ)
