/**
 * Scout - The Amiga System Monitor
 *
 *------------------------------------------------------------------
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * You must not use this source code to gain profit of any kind!
 *
 *------------------------------------------------------------------
 *
 * @author Andreas Gelhausen
 * @author Richard Körber <rkoerber@gmx.de>
 */



#ifndef SCOUT_DEFS_H
#define SCOUT_DEFS_H
#define WINDOW_PROBLEMS

/*************************************************************/
/*                      Some prototypes                      */
/*************************************************************/

void * __asm AsmAllocPooled(register __a0 void *,
                            register __d0 ULONG,
                            register __a6 struct ExecBase *);

void * __asm AsmCreatePool(register __d0 ULONG,
                           register __d1 ULONG,
                           register __d2 ULONG,
                           register __a6 struct ExecBase *);

void __asm AsmDeletePool(register __a0 void *,
                         register __a6 struct ExecBase *);

void __asm AsmFreePooled(register __a0 void *,
                         register __a1 void *,
                         register __d0 ULONG,
                         register __a6 struct ExecBase *);

/*************************************************************/
/*                  Compiler specific stuff                  */
/*************************************************************/

#define REG(x) register __ ## x
#define ASM    __asm
#define SAVEDS __saveds

/*************************************************************/
/*                      User definitions                     */
/*************************************************************/

#define aprintf            Printf
#define points2ram         TypeOfMem

#define FIRSTLIBRARY    ((struct Library *)  (SysBase->LibList.lh_Head))
#define FIRSTDEVICE     ((struct Library *)  (SysBase->DeviceList.lh_Head))
#define FIRSTRESOURCE   ((struct Library *)  (SysBase->ResourceList.lh_Head))
#define FIRSTTASKWAIT   ((struct Task *)     (SysBase->TaskWait.lh_Head))
#define FIRSTTASKREADY  ((struct Task *)     (SysBase->TaskReady.lh_Head))
#define FIRSTPORT       ((struct MsgPort *)  (SysBase->PortList.lh_Head))
#define FIRSTMEMORY     ((struct MemHeader *) (SysBase->MemList.lh_Head))
#define FIRSTINTERRUPT  ((struct Interrupt *) (SysBase->IntrList.lh_Head))
#define FIRSTSEMAPHORE  ((struct SignalSemaphore *) (SysBase->SemaphoreList.lh_Head))
#define FIRSTRESIDENT   ((struct Resident *) (SysBase->ResModules))
#define FIRSTSCREEN     ((struct Screen *)   (((struct IntuitionBase *)IntuitionBase)->FirstScreen))
#define FIRSTFONT       ((struct TextFont *) (((struct GfxBase *) GfxBase)->TextFonts.lh_Head))

#define DEVINFO         ((struct DosInfo *)  ((((struct DosLibrary *)DOSBase)->dl_Root->rn_Info)<<2))
#define DOSLIST         ((struct DosList *)  ((DEVINFO->di_DevInfo)<<2))
#define FIRSTLOCK       ((struct FileLock *) ((DEVLIST->dl_Lock)<<2))

#define ESC                "\033"
#define ULON               ESC "[4m"
#define ULOFF              ESC "[24m"
#define HELL               ESC "3"
#define DUNKEL             ESC "0"
#define FILENAMELENGTH     256
#define PRIORITYLENGTH     8
#define VERSIONLENGTH      16
#define ADDRESSLENGTH      10
#define PATHLENGTH         80
#define PATHLENGTHCHAR     "80"
#define NODENAMELENGTH     60
#define TEXTLENGTH         100
#define TEXTLENGTHCHAR     "100"
#define MAXTEXTLENGTH      256
#define CTRLC              0x1000
#define LOCKSUPDATERATE    11
#define NODETYPELEN        13+1
#define TASKSTATELEN       7+1
#define TS_FROZEN          0xff

#define MakeID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))

/*********************************************************************
   Definitionen für den Parameter 'sl_jobs' der ScanLocks-Routine!
*********************************************************************/
#define SL_REMOVE    1
#define SL_LIST      2
#define SL_COUNT     3

/*********************************************************************
 Definitionen für den Parameter 'si_jobs' der GetInterrupts-Routine!
*********************************************************************/
#define SI_REMOVE    1
#define SI_LIST      2
#define SI_FIND      3

/*********************************************************************
                        Definitionen für MUI
*********************************************************************/
#define List(ftxt)   ListviewObject,MUIA_Weight,50,MUIA_Listview_Input,\
            FALSE,MUIA_Listview_List,FloattextObject,MUIA_Frame,\
            MUIV_Frame_ReadList, MUIA_Floattext_Text, ftxt,\
            MUIA_Floattext_TabSize, 4, MUIA_Floattext_Justify,\
            TRUE, End, End

#define ImageLine(name,nr) HGroup,Child,TextObject,MUIA_Text_Contents,\
            "\33r"name,MUIA_FixWidthTxt,"RadioButton:",End,Child,VGroup,\
            Child,VSpace(0),Child,ImageObject,MUIA_Image_Spec,nr,End,\
            Child,VSpace(0),End,End

#define ScaledImage(nr,s,x,y) ImageObject,MUIA_Image_Spec,nr,MUIA_FixWidth,\
            x,MUIA_FixHeight,y,MUIA_Image_FreeHoriz,TRUE,MUIA_Image_FreeVert,\
            TRUE,MUIA_Image_State,s,End

#define HProp  PropObject,PropFrame,MUIA_Prop_Horiz,TRUE,MUIA_FixHeight,8,\
            MUIA_Prop_Entries,111,MUIA_Prop_Visible,10,End

#define VProp  PropObject,PropFrame,MUIA_Prop_Horiz,FALSE,MUIA_FixWidth,8,\
            MUIA_Prop_Entries,111,MUIA_Prop_Visible,10,End

#define MyTextFrame TextFrame,MUIA_Background,MUII_TextBack

#define LabelA(label)   TextObject,MUIA_Text_PreParse,"\33r",\
            MUIA_Text_Contents,label,TextFrame,MUIA_FramePhantomHoriz,\
            TRUE,End

#define LabelB(label)   TextObject,MUIA_Text_PreParse,"\33r",\
            MUIA_Text_Contents,label,TextFrame,MUIA_FramePhantomHoriz,\
            TRUE,MUIA_Weight,0,MUIA_InnerLeft,0,MUIA_InnerRight,0,End

enum ids {
   ID_FIRSTID=0,ID_LIBRARIES,ID_DEVICES,ID_RESOURCES,ID_TASKS,ID_LOCKS,ID_PORTS,ID_COMMANDS,
   ID_MEMORY,ID_INTERRUPTS,ID_SEMAPHORES,ID_INPUTHANDLER,ID_RESIDENTS,ID_WINDOWS,
   ID_EXPANSIONS,ID_ASSIGNS,ID_FONTS,ID_VECTORS,ID_COMMODITIES,ID_SYSTEM,ID_LOWMEMORY,
   ID_MOUNT,ID_SCREENMODE,ID_ALLOCATIONS,ID_TIMER,ID_CLASSES,

   ID_LIBUPDATE,ID_LIBPRINT,ID_LIBREMOVE,ID_LIBCLOSE,ID_LIBPRIORITY,ID_LIBMORE,ID_LIBEXIT,ID_LIBLV_ACTIVE,ID_LIBFUNCTIONS,
   ID_DEVUPDATE,ID_DEVPRINT,ID_DEVREMOVE,ID_DEVPRIORITY,ID_DEVMORE,ID_DEVEXIT,ID_DEVLV_ACTIVE,ID_DEVFUNCTIONS,
   ID_RESUPDATE,ID_RESPRINT,ID_RESREMOVE,ID_RESPRIORITY,ID_RESMORE,ID_RESEXIT,ID_RESLV_ACTIVE,ID_RESFUNCTIONS,
   ID_TASKPRINT,ID_TASKREMOVE,ID_TASKFREEZE,ID_TASKACTIVATE,ID_TASKPRIORITY,ID_TASKUPDATE,ID_TASKSIGNAL,ID_TASKBREAK,ID_TASKMORE,ID_TASKEXIT,ID_TASKLV_ACTIVE,
   ID_LOCKUPDATE,ID_LOCKPRINT,ID_LOCKREMOVE,ID_LOCKEXIT,ID_LOCKLV_ACTIVE,
   ID_PORTUPDATE,ID_PORTPRINT,ID_PORTREMOVE,ID_PORTPRIORITY,ID_PORTMORE,ID_PORTEXIT,ID_PORTLV_ACTIVE,
   ID_MEMPRINT,ID_MEMPRIORITY,ID_MEMMORE,ID_MEMEXIT,ID_MEMLV_ACTIVE,
   ID_INTUPDATE,ID_INTPRINT,ID_INTREMOVE,ID_INTMORE,ID_INTEXIT,ID_INTLV_ACTIVE,
   ID_SEMUPDATE,ID_SEMPRINT,ID_SEMOBTAIN,ID_SEMRELEASE,ID_SEMREMOVE,ID_SEMEXIT,ID_SEMLV_ACTIVE,
   ID_INPUTUPDATE,ID_INPUTPRINT,ID_INPUTREMOVE,ID_INPUTPRIORITY,ID_INPUTEXIT,ID_INPUTLV_ACTIVE,
   ID_RESIUPDATE,ID_RESIPRINT,ID_RESIMORE,ID_RESIEXIT,ID_RESILV_ACTIVE,
   ID_WINUPDATE,ID_WINPRINT,ID_WINCLOSE,ID_WINTOFRONT,ID_WINMORE,ID_WINEXIT,ID_WINLV_ACTIVE,
   ID_EXPPRINT,ID_EXPMORE,ID_EXPEXIT,ID_EXPLV_ACTIVE,
   ID_ASSUPDATE,ID_ASSPRINT,ID_ASSREMOVE,ID_ASSEXIT,ID_ASSLV_ACTIVE,
   ID_FONTUPDATE,ID_FONTPRINT,ID_FONTCLOSE,ID_FONTREMOVE,ID_FONTEXIT,ID_FONTLV_ACTIVE,
   ID_VECUPDATE,ID_VECPRINT,ID_VECEXIT,
   ID_SYSPRINT,ID_SYSEXIT,ID_SYSUPDATE,
   ID_LOWMEMORYUPDATE,ID_LOWMEMORYPRINT,ID_LOWMEMORYREMOVE,ID_LOWMEMORYCAUSE,ID_LOWMEMORYPRIORITY,ID_LOWMEMORYEXIT,ID_LOWMEMORYLV_ACTIVE,
   ID_TIMERUPDATE,ID_TIMERPRINT,ID_TIMERREMOVE,ID_TIMERPRIORITY,ID_TIMEREXIT,ID_TIMERLV_ACTIVE,
   ID_CXPRINT,ID_CXREMOVE,ID_CXPRIORITY,ID_CXUPDATE,ID_CXMORE,ID_CXEXIT,ID_CXLV_ACTIVE,ID_CXAPPEAR,ID_CXDISAPPEAR,ID_CXENABLE,ID_CXDISABLE,ID_CXKILL,ID_CXLISTCHG,ID_CXUNIQUE,ID_CXSORT,
   ID_CLASSPRINT,ID_CLASSREMOVE,ID_CLASSUPDATE,ID_CLASSMORE,ID_CLASSEXIT,ID_CLASSLV_ACTIVE,ID_CLASSSORT,
   ID_SMODEPRINT,ID_SMODEUPDATE,ID_SMODEMORE,ID_SMODEEXIT,ID_SMODESORT,ID_SMODELV_ACTIVE,
   ID_ALCPRINT,ID_ALCUPDATE,ID_ALCEXIT,

   ID_MOUNTUPDATE,ID_MOUNTPRINT,ID_MOUNTMORE,ID_MOUNTEXIT,ID_MOUNTLV_ACTIVE,
   ID_COMPRINT,ID_COMUPDATE,ID_COMREMOVE,ID_COMEXIT,ID_COMLV_ACTIVE,
   ID_REMOVEWINFREE,

   ID_ABOUT,ID_ABOUTCONTINUE,ID_LOAD,ID_SAVE,
   ID_PRIORITYOK,ID_PRIORITYEXIT,
   ID_SIGNALOK,ID_SIGNALEXIT,
   ID_FLUSHALL,ID_FLUSHDEVS,ID_FLUSHFONTS,ID_FLUSHLIBS,
   ID_CPUUSAGE,ID_CLEARRESET,

   ID_DOUBLESTART,
        ID_LIBSORT,ID_DEVSORT,ID_RESSORT,ID_TASKSORT,ID_PORTSORT,ID_COMSORT,
   ID_EXPSORT,ID_MEMSORT,ID_RESISORT,ID_ASSSORT,ID_LOCKSORT,ID_MOUNTSORT,
   ID_INPUTSORT,ID_INTSORT,ID_FONTSORT,ID_SEMSORT,

   ID_FLAGWINDOW,

   ID_LASTID
};

struct   FlagEntry {
   char  *fe_name;
   char  *fe_text;
};

struct   ListEntry {
   ULONG le_next;
   ULONG le_adr;
   char  le_address[ADDRESSLENGTH];
   char  le_name[NODENAMELENGTH+2];
   char  le_pri[PRIORITYLENGTH];
};

struct   CommandEntry {
   struct CommandEntry *cm_next;
   char  *cm_adr;
   char  cm_address[ADDRESSLENGTH];
   char  cm_name[FILENAMELENGTH+2];
   char  cm_uc[10];
   char  cm_lower[10];
   char  cm_upper[10];
   char  cm_size[10];
};

struct   AssEntry {
   struct AssEntry *ass_next;
   char  *ass_adr;
   char  ass_address[ADDRESSLENGTH];
   char  ass_name[FILENAMELENGTH+2];
   char  *ass_path;
};

struct   ExpEntry {
   struct ExpEntry *exp_next;
   struct ConfigDev *exp_adr;
   char  exp_address[ADDRESSLENGTH];
   char  exp_flags[6];
   char  exp_boardaddr[10];
   char  exp_boardsize[10];
   char  exp_type[6];
   char  exp_product[6];
   char  exp_manufacturer[10];
   char  exp_serialnumber[12];
   char  exp_manufname[50];
   char  exp_prodname[50];
   char  exp_prodclass[50];
   char  exp_complete_product[128];
};

struct WinFree {
   APTR wf_Window; 
   APTR wf_ActiveObject;
   struct Remember *wf_RememberKey;
   struct WinFree *wf_Next;
   struct WinFree *wf_Previous;
};

struct WinFlag {
   char  *wf_title2;
   char  *wf_fieldname;
   ULONG wf_flags;
   struct LongFlag *wf_longflag;
   struct MaskedLongFlag *wf_mlongflag;
   char  wf_fieldtype;
};

struct   LongFlag {
  long  lf_value;
  char  *lf_name;
  char  *lf_text;
};

struct   MaskedLongFlag {
  long  mlf_value;
  long  mlf_mask;
  char  *mlf_name;
  char  *mlf_text;
};

struct   FontEntry {
   struct   FontEntry   *font_next;
   struct   TextFont    *font_adr;
   char  font_address[ADDRESSLENGTH];
   char  font_name[FILENAMELENGTH+2];
   char  font_ysize[6];
   char  font_style[6];
   char  font_flags[6];
   char  font_count[8];
   char  font_lochar[6];
   char  font_hichar[6];
   char  font_place[10];
};

struct   LibEntry {
   struct LibEntry *lib_next;
   char  *lib_ptr;
   char  lib_address[ADDRESSLENGTH];
   char  lib_name[FILENAMELENGTH+2];
   char  lib_pri[PRIORITYLENGTH];
   char  lib_ver[VERSIONLENGTH];
   char  lib_ocnt[8];
   char  lib_rcnt[6];
   char  lib_type[NODETYPELEN];
};

struct   LockEntry {
   struct   LockEntry   *lock_next;
   char  *lock_ptr;
   char  lock_address[ADDRESSLENGTH];
   char  lock_access[32];
   char  *lock_path;
};

struct   MountEntry {
   struct   MountEntry  *mt_next;
   struct   DeviceNode  *mt_adr;
   char  mt_address[ADDRESSLENGTH];
   char  mt_name[FILENAMELENGTH+2];
   char  mt_unit[10];
   char  mt_heads[10];
   char  mt_cyl[10];
   char  mt_diskstate[12];
   char  mt_filesystem[10];
   char  mt_handler[FILENAMELENGTH+2];
};

struct   PortEntry {
   struct   PortEntry   *pt_next;
   struct   MsgPort     *pt_adr;
   char  pt_address[ADDRESSLENGTH];
   char  pt_name[NODENAMELENGTH+2];
   char  pt_pri[PRIORITYLENGTH];
   char  pt_sigbit[10];
   char  pt_sigtask[NODENAMELENGTH+2];
};

struct   SemEntry {
   struct   SemEntry    *sm_next;
   struct   SignalSemaphore   *sm_adr;
   char  sm_address[ADDRESSLENGTH];
   char  sm_name[FILENAMELENGTH+2];
   char  sm_nestcount[5];
   char  sm_queuecount[5];
   char  sm_owner[NODENAMELENGTH+2];
};

struct   TaskEntry {
   struct   TaskEntry   *ts_next;
   struct   Task        *ts_ptr;
   char  ts_address[ADDRESSLENGTH];
   char  ts_name[NODENAMELENGTH+2];
   char  ts_pri[PRIORITYLENGTH];
   char  ts_type[NODETYPELEN];
   char  ts_num[4];
   char  ts_state[TASKSTATELEN];
   char  ts_cpu[10];
   char  ts_sigwait[10];
};

struct   HunkEntry {
   char  he_lower[10];
   char  he_upper[10];
   char  he_size[10];
};

struct   WinEntry {
   struct   WinEntry *wn_next;
   char  *wn_adr;
   char  wn_address[10+2];
   char  wn_position[10+2];
   char  wn_size[10+2];
   char  wn_flags[10+2];
   char  wn_idcmp[10+2];
   char  wn_title[TEXTLENGTH+2+4]; //Ohne diese 4 zusätzlichen Bytes gibt
                                   // es einen MungWall-Hit!
   char  wn_type;
};

#include <libraries/commodities.h>

struct   CxEntry {
   struct CxEntry  *cxe_next;
   char *cxe_adr;
   char cxe_address[ADDRESSLENGTH];
   char cxe_type[NODETYPELEN];
   char cxe_pri[PRIORITYLENGTH];
   char cxe_name[CBD_NAMELEN];
   char cxe_title[CBD_TITLELEN];
   char cxe_descr[CBD_DESCRLEN];
   char cxe_task[10+2];
   char cxe_port[10+2];
   char cxe_unique[10+2];
   char cxe_flags[10+2];
};

struct  CxSubEntry {
   char cse_address[ADDRESSLENGTH];
   char cse_type[NODETYPELEN];
   char cse_pri[PRIORITYLENGTH];
};

struct  SModeEntry{
   struct SModeEntry *sme_next;
   ULONG sme_smodeid;
   char sme_id[ADDRESSLENGTH];
   char sme_name[70];
   char sme_width[10];
   char sme_height[10];
   char sme_depth[10];
};

struct   ClassEntry {
   struct ClassEntry  *cse_next;
   struct IClass *cse_adr;
   char cse_address[ADDRESSLENGTH];
   char cse_super[80];
   char cse_dispatch[ADDRESSLENGTH];
   char cse_classname[80];
   char cse_objcnt[10+2];
   char cse_subcnt[10+2];
};


#endif /* SCOUT_DEFS_H */
