/**
 * 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 WinFree {
   APTR wf_Window; 
   APTR wf_ActiveObject;
   APTR wf_Pool;
   struct WinFree *wf_Next;
   struct WinFree *wf_Previous;
};

#endif /* SCOUT_DEFS_H */
