
#define abs

#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <dos/dos.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <libraries/asl.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/asl_protos.h>
#include <clib/alib_protos.h>

#ifdef NOTDEF
#include <db/dblib.h>
#include <db/db.h>
#include <db/dbm.h>
#include <dbm/menu_dbm.h>
#endif

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

#include "tplcontrol_defs.h"

#define ACT_NEW   0
#define ACT_COPY  1
#define ACT_MOVE  2
#define ACT_SIZE  3
#define ACT_EXCL  4
#define ACT_DEL   5
#define ACT_TEST  6

#define SPEC_CHECKED      1
#define SPEC_BORDER       2
#define SPEC_VERTICAL     4
#define SPEC_HIGHLABEL    8
#define SPEC_RECESSED    16
#define SPEC_READONLY    32
#define SPEC_IMMEDIATE   64
#define SPEC_DISABLED   128
#define SPEC_RELVERIFY  256

#define SPEC_ITEM       512
#define SPEC_BUFSPACE  1024
#define SPEC_MAXVAL    2048
#define SPEC_DEFVAL    4096
#define SPEC_DEFAULT   8192

#define SPEC_EXCL       SPEC_CHECKED  | \
                        SPEC_BORDER   | \
                        SPEC_VERTICAL | \
                        SPEC_HIGHLABEL| \
                        SPEC_RECESSED | \
                        SPEC_READONLY | \
                        SPEC_IMMEDIATE| \
                        SPEC_DISABLED | \
                        SPEC_RELVERIFY| \
                        SPEC_BUFSPACE | \
                        SPEC_MAXVAL   | \
                        SPEC_DEFVAL   | \
                        SPEC_DEFAULT  | \
                        SPEC_ITEM

#define STATE_NEWREGION     0
#define STATE_COPYREGION    1   /*  copy from region to region  */
#define STATE_MOVEREGION    2
#define STATE_SIZEREGION    3
#define STATE_EXCLREGION    4   /*  exclude buttons grouping  */
#define STATE_DELREGION     5
#define STATE_TEST          6
#define STATE_LINKREGION    7   /*  link from region to region  */
#define STATE_UNLINKREGION  8   /*  unlink region from region  */

#define MENU_PROJ_SAVE          1
#define MENU_PROJ_SAVEAS        2
#define MENU_PROJ_SAVESRC       3
#define MENU_PROJ_SAVEMAINNO    4
#define MENU_PROJ_SAVEMAINYES   5
#define MENU_PROJ_SAVEASSRC     6
#define MENU_PROJ_SAVEASMAINNO  7
#define MENU_PROJ_SAVEASMAINYES 8
#define MENU_PROJ_LOAD          9
#define MENU_PROJ_MERGE        10
#define MENU_PROJ_QUIT         11

#define MENU_EDIT_LOCK      16
#define MENU_EDIT_UNLOCK    17
#define MENU_EDIT_SORT      18

#define MENU_GADGET         32

#define MENU_SNAP           64

#define SNAP_EXCL           (1|2|4|8|16|32|64|128|256|512|1024)
#define GADGET_EXCL         (1|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192)


typedef struct Box {
    short   bo_Xs;
    short   bo_Ys;
    short   bo_Xe;
    short   bo_Ye;
} Box;

typedef struct TplRegion {
    MaxNode rg_Node;            /*  region link & name  */
    Box     rg_Box;             /*  current size        */
    Box     rg_MinMax;          /*  min size / max size */
    uword   rg_Id;              /*  database ID in file */
    Gadget  *rg_Gad;            /*  related gadget      */
    struct  TplRegion *rg_LinkLeft;
    struct  TplRegion *rg_LinkRight;
    struct  TplRegion *rg_LinkUp;
    struct  TplRegion *rg_LinkDown;
    struct  TplRegion *rg_LockedTo;
    long    rg_Flags;
    short   rg_Type;
    short   rg_BufSpace;        /*  maximum buffer len  */
    long    rg_ExclGroup;       /*  used to toggle buttons */

    char    *rg_DataBase;       /*  one of              */
    char    *rg_ListRef;
    char    **rg_CycleAry;      /*  same as ListSet     */
    List    rg_ListSet;

    char    *rg_DefText;        /*  default text/name */
    char    *rg_LabText;
    TextAttr rg_TextAttr;       /*  font to use         */
    long     rg_SpecFlags;      /*  special flags */
    long     rg_MaxVal;         /*  max numeric value */
    long     rg_DefVal;         /*  def numeric value */
} TplRegion;

#define RGT_INVISIBLE   GENERIC_KIND    /*  0 */
#define RGT_BUTTON      BUTTON_KIND     /*  1 */
#define RGT_CHECKBOX    CHECKBOX_KIND   /*  2 */
#define RGT_INTEGER     INTEGER_KIND    /*  3 */
#define RGT_LISTVIEW    LISTVIEW_KIND   /*  4 */
#define RGT_MX          MX_KIND         /*  5 */
#define RGT_NUMBER      NUMBER_KIND     /*  6 */
#define RGT_CYCLE       CYCLE_KIND      /*  7 */
#define RGT_PALETTE     PALETTE_KIND    /*  8 */
#define RGT_SCROLLER    SCROLLER_KIND   /*  9 */
#define RGT_BEVELBOX    10              /*  10 else reserved */
#define RGT_SLIDER      SLIDER_KIND     /*  11*/
#define RGT_STRING      STRING_KIND     /*  12*/
#define RGT_TEXT        TEXT_KIND       /*  13*/


typedef struct ProjEntry {
    uword   pe_Type;
    long    pe_Len;
} ProjEntry;

typedef struct ProjHeader {
    long    ph_Magic;
    long    ph_HdrSize;
    long    ph_Version;
    Box     ph_WinDim;
    Box     ph_MinMaxDim;
    Box     ph_ZoomDim;
} ProjHeader;

typedef struct PPNode {
    Node    pp_Node;
    long    pp_Pos;
} PPNode;

#define PH_MAGIC    'TPLE'

#define PT_PROJECT      1           /*  heirarchy   */
#define PT_HEADER       2
#define PT_REGION       3           /*  heirarchy   */
#define PT_NAME         4
#define PT_BOX          5
#define PT_MINMAX       6
#define PT_ID           7
#define PT_REGLL        8
#define PT_REGLR        9
#define PT_REGLU        10
#define PT_REGLD        11
#define PT_LOCKTO       12
#define PT_FLAGS        13
#define PT_TYPE         14
#define PT_EXCLID       15
#define PT_DATABASE     16          /*  heirarchy   */
#define PT_LISTREF      17          /*  heirarchy   */
#define PT_LISTSET      18          /*  heirarchy   */
#define PT_DEFTEXT      19          /*  heirarchy   */
#define PT_TEXTATTR     20          /*  heirarchy   */
#define PT_YSIZE        21
#define PT_LABTEXT      22          /*  heirarchy   */
#define PT_MAXBUFLEN    23
#define PT_SPECFLAGS    24          /*  added by koessi 11.91 */
#define PT_MAXVAL       25          /*  added by koessi 11.91 */
#define PT_DEFVAL       26          /*  added by koessi 11.91 */
#define PT_END          0xFFFF

extern void *GetHead();
extern void *GetSucc();

#include <tpl-protos.h>


