home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
System
/
Sysmon
/
src
/
AlertDump.c
next >
Wrap
C/C++ Source or Header
|
2000-05-30
|
27KB
|
759 lines
/*
** $RCSfile: AlertDump.c,v $
** $Filename: AlertDump.c $
** $Revision: 1.2 $
** $Date: 2000/05/01 19:48:21 $
**
** sysmon.library support command AlertDump (version 1.2)
**
** (C) Copyright 1999-2000 by Etienne Vogt
*/
#include <exec/alerts.h>
#include <mmu/alerts.h>
#include <dos/dos.h>
#include <workbench/startup.h>
#define __USE_SYSBASE
#include <proto/exec.h>
#include <proto/dos.h>
#include <exec/execbase.h>
#include <string.h>
#include <stdlib.h>
#include "sysmon.h"
#ifndef AFF_68060
#define AFB_68060 7
#define AFF_68060 (1L<<7)
#endif
ULONG __saveds main(void);
static void cleanexit(ULONG rc);
static STRPTR alerttype(ULONG alertnum);
static STRPTR alertsub(ULONG alertnum);
static STRPTR alertgen(ULONG alertnum);
static STRPTR alertobj(ULONG alertnum);
static STRPTR alertname(ULONG alertnum);
static char *cpustr(UWORD cpuflags);
static UBYTE version[] = "$VER: AlertDump 1.2 (30.4.2000)";
static UBYTE template[] = "CLEAR/S";
#define OPT_CLEAR 0
#define OPTMAX 1
struct ExecBase *SysBase;
struct DosLibrary *DOSBase;
static struct WBStartup *wbmsg;
static struct RDArgs *myrda;
struct SysmonBase *SysmonBase;
ULONG __saveds main(void) /* No startup code */
{
struct Process *myproc;
struct LastGuru *lastguru;
LONG opts[OPTMAX];
SysBase = *(struct ExecBase **)4;
DOSBase = NULL;
SysmonBase = NULL;
wbmsg = NULL;
myrda = NULL;
myproc = (struct Process *)FindTask(NULL);
if ((DOSBase = (struct DosLibrary *)OpenLibrary("dos.library",36)) == NULL)
{ Alert(AT_Recovery|AG_OpenLib|AO_DOSLib);
return 100;
}
if (!(myproc->pr_CLI)) /* If started from WB, exit cleanly */
{ WaitPort(&(myproc->pr_MsgPort));
wbmsg = (struct WBStartup *)GetMsg(&(myproc->pr_MsgPort));
cleanexit(20);
}
if ((SysmonBase = (struct SysmonBase *)OpenLibrary("sysmon.library",1)) == NULL)
{ PutStr("AlertDump: couldn't open sysmon.library V1+\n");
cleanexit(20);
}
memset((char *)opts, 0, sizeof(opts));
if ((myrda = ReadArgs(template, opts, NULL)) == NULL)
{ PrintFault(IoErr(),NULL);
cleanexit(20);
}
if ((lastguru = SysmonBase->sb_LastGuru) && lastguru->lg_Sig == (ULONG)'HELP')
{ UWORD cpu = SysBase->AttnFlags;
Printf("\n%s Alert %s\n", alerttype(lastguru->lg_AlertNum), cpustr(cpu));
Printf(" Guru Meditation: %08lx %s\n", lastguru->lg_AlertNum, alertname(lastguru->lg_AlertNum));
Printf(" Current Task : %08lx %.32s\n", lastguru->lg_AlertAddr, lastguru->lg_TaskName);
Printf(" SubSystem : %s\n", alertsub(lastguru->lg_AlertNum));
Printf(" General Error : %s\n", alertgen(lastguru->lg_AlertNum));
Printf(" Alert Object : %s\n", alertobj(lastguru->lg_AlertNum));
PutStr("\nInteger registers\n");
Printf(" D0-D7 = %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",lastguru->lg_DataRegs[0],lastguru->lg_DataRegs[1],lastguru->lg_DataRegs[2],lastguru->lg_DataRegs[3],lastguru->lg_DataRegs[4],lastguru->lg_DataRegs[5],lastguru->lg_DataRegs[6],lastguru->lg_DataRegs[7]);
Printf(" A0-A7 = %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",lastguru->lg_AddrRegs[0],lastguru->lg_AddrRegs[1],lastguru->lg_AddrRegs[2],lastguru->lg_AddrRegs[3],lastguru->lg_AddrRegs[4],lastguru->lg_AddrRegs[5],lastguru->lg_AddrRegs[6],lastguru->lg_AddrRegs[7]);
Printf(" PC = %08lx, SR = %04lx\n",lastguru->lg_PC,(LONG)lastguru->lg_SR);
if (SysmonBase->sb_Flags & SBFF_FPU)
{ PutStr("\nFloating Point registers\n");
Printf(" FP0-FP1 = %08lx%08lx%08lx %08lx%08lx%08lx\n",lastguru->lg_FloatRegs[0],lastguru->lg_FloatRegs[1],lastguru->lg_FloatRegs[2],lastguru->lg_FloatRegs[3],lastguru->lg_FloatRegs[4],lastguru->lg_FloatRegs[5]);
Printf(" FP2-FP3 = %08lx%08lx%08lx %08lx%08lx%08lx\n",lastguru->lg_FloatRegs[6],lastguru->lg_FloatRegs[7],lastguru->lg_FloatRegs[8],lastguru->lg_FloatRegs[9],lastguru->lg_FloatRegs[10],lastguru->lg_FloatRegs[11]);
Printf(" FP4-FP5 = %08lx%08lx%08lx %08lx%08lx%08lx\n",lastguru->lg_FloatRegs[12],lastguru->lg_FloatRegs[13],lastguru->lg_FloatRegs[14],lastguru->lg_FloatRegs[15],lastguru->lg_FloatRegs[16],lastguru->lg_FloatRegs[17]);
Printf(" FP6-FP7 = %08lx%08lx%08lx %08lx%08lx%08lx\n",lastguru->lg_FloatRegs[18],lastguru->lg_FloatRegs[19],lastguru->lg_FloatRegs[20],lastguru->lg_FloatRegs[21],lastguru->lg_FloatRegs[22],lastguru->lg_FloatRegs[23]);
Printf(" FPCR = %08lx, FPSR = %08lx, FPIAR = %08lx\n",lastguru->lg_FPCR,lastguru->lg_FPSR,lastguru->lg_FPIAR);
}
PutStr("\nSystem registers\n");
Printf(" USP = %08lx, ",lastguru->lg_USP);
if ((cpu & AFF_68020) && (cpu & AFF_68060) == 0)
{ Printf("ISP = %08lx, MSP = %08lx\n",lastguru->lg_SSP,lastguru->lg_MSP);
}
else
{ Printf("SSP = %08lx\n",lastguru->lg_SSP);
}
if (cpu & AFF_68010)
{ Printf(" VBR = %08lx, SFC = %08lx, DFC = %08lx\n",lastguru->lg_VBR,lastguru->lg_SFC,lastguru->lg_DFC);
if (cpu & AFF_68020)
{ Printf(" CACR = %08lx",lastguru->lg_CACR);
if ((cpu & AFF_68040) == 0) Printf(", CAAR = %08lx",lastguru->lg_CAAR);
PutStr("\n");
if (cpu & AFF_68030)
{ if (cpu & AFF_68040)
{ Printf(" ITT0 = %08lx, ITT1 = %08lx, DTT0 = %08lx, DTT1 = %08lx\n",lastguru->lg_ITT0,lastguru->lg_ITT1,lastguru->lg_DTT0,lastguru->lg_DTT1);
Printf(" TC = %08lx, URP = %08lx, SRP = %08lx\n",lastguru->lg_TC,lastguru->lg_URP,lastguru->lg_SRP);
}
else
{ Printf(" TT0 = %08lx, TT1 = %08lx\n",lastguru->lg_ITT0,lastguru->lg_ITT1);
Printf(" TC = %08lx, CRP = %08lx%08lx, SRP = %08lx%08lx\n",lastguru->lg_TC,lastguru->lg_DTT0,lastguru->lg_DTT1,lastguru->lg_URP,lastguru->lg_SRP);
}
if (cpu & AFF_68060) Printf(" PCR = %08lx, BUSCR = %08lx\n",lastguru->lg_MSP,lastguru->lg_MMUSR);
else if (cpu & AFF_68040) Printf(" MMUSR = %08lx\n",lastguru->lg_MMUSR);
else Printf(" MMUSR = %04lx\n",lastguru->lg_MMUSR >> 16);
}
}
}
if (opts[OPT_CLEAR]) lastguru->lg_Sig = 0;
}
else PutStr("No LastGuru data available\n");
cleanexit(0);
}
static void cleanexit(ULONG rc)
{
if (myrda) FreeArgs(myrda);
if (DOSBase) CloseLibrary((struct Library *)DOSBase);
if (SysmonBase) CloseLibrary((struct Library *)SysmonBase);
if (wbmsg)
{ Forbid();
ReplyMsg((struct Message *)wbmsg);
}
Exit(rc);
}
static STRPTR alerttype(ULONG alertnum)
{ if (alertnum & AT_DeadEnd) return "DeadEnd";
else return "Recoverable";
}
static STRPTR alertsub(ULONG alertnum)
{ switch (alertnum & 0x7f000000)
{ case AN_ExecLib:
return "exec.library";
case AN_GraphicsLib:
return "graphics.library";
case AN_LayersLib:
return "layers.library";
case AN_Intuition:
return "intuition.library";
case AN_MathLib:
return "math*.library";
case 0x06000000:
return "clist.library (obsolete)";
case AN_DOSLib:
return "dos.library";
case AN_RAMLib:
return "ramlib";
case AN_IconLib:
return "icon.library";
case AN_ExpansionLib:
return "expansion.library";
case AN_DiskfontLib:
return "diskfont.library";
case AN_AudioDev:
return "audio.device";
case AN_ConsoleDev:
return "console.device";
case AN_GamePortDev:
return "gameport.device";
case AN_KeyboardDev:
return "keyboard.device";
case AN_TrackDiskDev:
return "trackdisk.device";
case AN_TimerDev:
return "timer.device";
case AN_CIARsrc:
return "cia.resource";
case AN_DiskRsrc:
return "disk.resource";
case AN_MiscRsrc:
return "misc.resource";
case AN_BootStrap:
return "strap";
case AN_Workbench:
return "Workbench";
case AN_DiskCopy:
return "DiskCopy";
case AN_GadTools:
return "gadtools.library";
case AN_UtilityLib:
return "utility.library";
case AN_Unknown:
return "Unknown";
case AN_MMULib:
return "mmu.library";
case 0x40000000:
return "sysmon.library";
case 0x50000000:
return "vdisk.device";
case 0x70000000:
return "ErrorLogD";
default:
return "N/A";
}
}
static STRPTR alertobj(ULONG alertnum)
{ switch (alertnum & 0x0000ffff)
{ case AO_ExecLib:
return "exec.library";
case AO_GraphicsLib:
return "graphics.library";
case AO_LayersLib:
return "layers.library";
case AO_Intuition:
return "intuition.library";
case AO_MathLib:
return "math*.library";
case 0x00008006:
return "clist.library (obsolete)";
case AO_DOSLib:
return "dos.library";
case AO_RAMLib:
return "ramlib";
case AO_IconLib:
return "icon.library";
case AO_ExpansionLib:
return "expansion.library";
case AO_DiskfontLib:
return "diskfont.library";
case AO_AudioDev:
return "audio.device";
case AO_ConsoleDev:
return "console.device";
case AO_GamePortDev:
return "gameport.device";
case AO_KeyboardDev:
return "keyboard.device";
case AO_TrackDiskDev:
return "trackdisk.device";
case AO_TimerDev:
return "timer.device";
case AO_CIARsrc:
return "cia.resource";
case AO_DiskRsrc:
return "disk.resource";
case AO_MiscRsrc:
return "misc.resource";
case AO_BootStrap:
return "strap";
case AO_Workbench:
return "Workbench";
case AO_DiskCopy:
return "DiskCopy";
case AO_GadTools:
return "gadtools.library";
case AO_UtilityLib:
return "utility.library";
case AO_Unknown:
return "Unknown";
case 0x0000803e:
return "mmu.library";
case 0x00008040:
return "sysmon.library";
case 0x00008050:
return "vdisk.device";
case 0x00008070:
return "ErrorLogD";
default:
return "N/A";
}
}
static STRPTR alertgen(ULONG alertnum)
{ switch (alertnum & 0x00ff0000)
{ case AG_NoMemory:
return "Not enough memory";
case AG_MakeLib:
return "Library initialization failure";
case AG_OpenLib:
return "OpenLibrary() failure";
case AG_OpenDev:
return "OpenDevice() failure";
case AG_OpenRes:
return "OpenResource() failure";
case AG_IOError:
return "I/O error";
case AG_NoSignal:
return "No signal available";
case AG_BadParm:
return "Bad parameter(s) to function";
case AG_CloseLib:
return "Mismatched or too many CloseLibrary()";
case AG_CloseDev:
return "Mismatched or too many CloseDevice()";
case AG_ProcCreate:
return "Process creation failed";
default:
return "N/A";
}
}
static STRPTR alertname(ULONG alertnum)
{ ULONG num = alertnum & 0x7fffffff;
if ((num >= 0x00000010 && num < 0x00000018) || num == 0x0000003B || num == 0x0000003E || num == 0x0000003F)
return "ACPU_Reserved (Reserved CPU vector)";
if (num >= 0x00000040 && num < 0x000000FF) return "ACPU_User (Quick interrupt vector)";
switch (num)
{ case 0x00000001: /* CPU Exception alerts */
return "ACPU_Reset (System reset or shutdown)";
case 0x00000002:
return "ACPU_BusErr (Bus or access error)";
case 0x00000003:
return "ACPU_AddressErr (Odd address error)";
case 0x00000004:
return "ACPU_InstErr (Illegal instruction)";
case 0x00000005:
return "ACPU_DivZero (Division by zero)";
case 0x00000006:
return "ACPU_CHK (CHK instruction exception)";
case 0x00000007:
return "ACPU_TRAPV (TRAPcc instruction exception)";
case 0x00000008:
return "ACPU_PrivErr (Privilege violation)";
case 0x00000009:
return "ACPU_Trace (Trace exception)";
case 0x0000000A:
return "ACPU_LineA (Unimplemented line 1010 instruction)";
case 0x0000000B:
return "ACPU_LineF (Unimplemented line 1111 instruction)";
case 0x0000000C:
return "ACPU_EmulInt (Emulation mode interrupt)";
case 0x0000000D:
return "ACPU_CoproErr (Coprocessor protocol violation)";
case 0x0000000E:
return "ACPU_Format (Stack frame format error)";
case 0x0000000F:
return "ACPU_UnInitInt (Uninitialized interrupt)";
case 0x00000018:
return "ACPU_Spurious (Spurious interrupt error)";
case 0x00000019:
return "ACPU_AutoVec1 (AutoVector Level 1 interrupt)";
case 0x0000001A:
return "ACPU_AutoVec2 (AutoVector Level 2 interrupt)";
case 0x0000001B:
return "ACPU_AutoVec3 (AutoVector Level 3 interrupt)";
case 0x0000001C:
return "ACPU_AutoVec4 (AutoVector Level 4 interrupt)";
case 0x0000001D:
return "ACPU_AutoVec5 (AutoVector Level 5 interrupt)";
case 0x0000001E:
return "ACPU_AutoVec6 (AutoVector Level 6 interrupt)";
case 0x0000001F:
return "ACPU_AutoVec7 (AutoVector Level 7 interrupt)";
case 0x00000020:
return "ACPU_Trap0 (TRAP #0 exception)";
case 0x00000021:
return "ACPU_Trap1 (TRAP #1 exception)";
case 0x00000022:
return "ACPU_Trap2 (TRAP #2 exception)";
case 0x00000023:
return "ACPU_Trap3 (TRAP #3 exception)";
case 0x00000024:
return "ACPU_Trap4 (TRAP #4 exception)";
case 0x00000025:
return "ACPU_Trap5 (TRAP #5 exception)";
case 0x00000026:
return "ACPU_Trap6 (TRAP #6 exception)";
case 0x00000027:
return "ACPU_Trap7 (TRAP #7 exception)";
case 0x00000028:
return "ACPU_Trap8 (TRAP #8 exception)";
case 0x00000029:
return "ACPU_Trap9 (TRAP #9 exception)";
case 0x0000002A:
return "ACPU_TrapA (TRAP #A exception)";
case 0x0000002B:
return "ACPU_TrapB (TRAP #B exception)";
case 0x0000002C:
return "ACPU_TrapC (TRAP #C exception)";
case 0x0000002D:
return "ACPU_TrapD (TRAP #D exception)";
case 0x0000002E:
return "ACPU_TrapE (TRAP #E exception)";
case 0x0000002F:
return "ACPU_TrapF (TRAP #F exception)";
case 0x00000030: /* FPU exceptions */
return "AFPU_BSUnord (Branch or Set on unordered condition)";
case 0x00000031:
return "AFPU_Inexact (Inexact result)";
case 0x00000032:
return "AFPU_FDivZero (Floating-point division by zero)";
case 0x00000033:
return "AFPU_Underflow (Floating-point underflow)";
case 0x00000034:
return "AFPU_Operand (Operand error)";
case 0x00000035:
return "AFPU_Overflow (Floating-point overflow)";
case 0x00000036:
return "AFPU_SNaN (Signaling NaN)";
case 0x00000037:
return "AFPU_UnDType (Unimplemented FP data type)";
case 0x00000038: /* MMU exceptions */
return "AMMU_Config (Configuration error)";
case 0x00000039:
return "AMMU_IllOp (Illegal operation)";
case 0x0000003A:
return "AMMU_AccessErr (Access level violation)";
case 0x0000003C:
return "ACPU_UnEffAddr (Unimplemented effective address)";
case 0x0000003D:
return "ACPU_UnIntInst (Unimplemented integer instruction)";
case 0x01000001: /* exec.library alerts */
return "AN_ExcptVect (Bad CPU exception vectors checksum)";
case 0x01000002:
return "AN_BaseChkSum (Bad ExecBase checksum)";
case 0x01000003:
return "AN_LibChkSum (Bad library jumptable checksum)";
case 0x01000004:
return "AN_LibMem (No memory for ExecBase structure)";
case 0x01000005:
return "AN_MemCorrupt (Corrupted memory list)";
case 0x01000006:
return "AN_IntrMem (No memory for interrupt servers)";
case 0x01000007:
return "AN_InitAPtr (InitStruct() with a 24bit address)";
case 0x01000008:
return "AN_SemCorrupt (Illegal semaphore state)";
case 0x01000009:
return "AN_FreeTwice (Freeing memory already freed)";
case 0x0100000A:
if (alertnum & AT_DeadEnd) return "AN_BogusExcpt (Illegal CPU exception taken)";
else return "AN_UnInitExcpt (Uninitialized task exception)";
case 0x0100000B:
return "AN_IOUsedTwice (Pending IORequest reused)";
case 0x0100000C:
return "AN_MemoryInsane (Sanity check on memory list failed)";
case 0x0100000D:
return "AN_IOAfterClose (Closed IORequest reused)";
case 0x0100000E:
return "AN_StackProbe (Stack out of range)";
case 0x0100000F:
return "AN_BadFreeAddr (Memory header not located)";
case 0x01000010:
return "AN_BadSemaphore (Obsolete semaphore structure used)";
case 0x010000FF:
return "AN_UnQuickIntr (Uninitialized quick interrupt)";
case 0x01000011: /* PoolMem alerts */
return "AN_MemHeadInsane (MemHeader Insane)";
case 0x01000012:
return "AN_InvDelHeader (Invalid DeleteHeader, internal)";
case 0x01000013:
return "AN_IllScratch (Scratch Entry Illegal)";
case 0x01000014:
return "AN_UnordPools (Memory Pools Unordered)";
case 0x01000015:
return "AN_AllocUnder (AllocMem Underflow)";
case 0x01000016:
return "AN_FreeOver (FreeMem Overflow)";
case 0x02010000: /* graphics.library alerts */
return "AN_GfxNoMem (No memory for graphics.library)";
case 0x02010001:
return "AN_GfxNoMemMspc (No memory for MonitorSpec)";
case 0x02010002:
return "AN_CopInstr (No memory for Copperlist)";
case 0x02000003:
return "AN_CopListOver (Copperlist overload)";
case 0x02000004:
return "AN_CopIListOver (Intermediate Copperlist overload)";
case 0x02010005:
return "AN_CopListHead (No memory for Copperlist head)";
case 0x02010006:
return "AN_LongFrame (No memory for long-frame Copperlist)";
case 0x02010007:
return "AN_ShortFrame (No memory for short-frame Copperlist)";
case 0x02010008:
return "AN_FloodFill (No memory for Flood Fill)";
case 0x02010009:
return "AN_TextTmpRas (No memory for Text TmpRas)";
case 0x0201000A:
return "AN_BltBitMap (No memory for BltBitMap)";
case 0x0201000B:
return "AN_RegionMemory (No memory for Region)";
case 0x0200000C:
return "AN_GfxNewError (Illegal node type for GfxNew)";
case 0x0200000D:
return "AN_GfxFreeError (Bad ExtendedNode for GfxFree)";
case 0x02000030:
return "AN_MakeVPort (No memory for MakeVPort)";
case 0x02000401:
return "AN_ObsoleteFont (Obsolete font description)";
case 0x02011234:
return "AN_GfxNoLCM (Emergency memory not available)";
case 0x03010000: /* layers.library alerts */
return "AN_LayersNoMem (No memory for layers.library)";
case 0x04000001: /* intuition.library alerts */
return "AN_GadgetType (Unknown gadget type)";
case 0x04010002:
return "AN_CreatePort (No memory for CreatePort)";
case 0x04010003:
return "AN_ItemAlloc (No memory for MenuItem plane)";
case 0x04010004:
return "AN_SubAlloc (No memory for SubItem plane)";
case 0x04010005:
return "AN_PlaneAlloc (No memory for plane)";
case 0x04000006:
return "AN_ItemBoxTop (Item box in negative region)";
case 0x04010007:
return "AN_OpenScreen (No memory for OpenScreen)";
case 0x04010008:
return "AN_OpenScrnRast (No memory for raster in OpenScreen)";
case 0x04000009:
return "AN_SysScrnType (Unknown sys screen type)";
case 0x0401000A:
return "AN_AddSWGadget (No memory to add gadget)";
case 0x0401000B:
return "AN_OpenWindow (No memory for OpenWindow)";
case 0x0400000C:
return "AN_BadState (Bad State entering Intuition)";
case 0x0400000D:
return "AN_BadMessage (Bad Message received by IDCMP)";
case 0x0400000E:
return "AN_WeirdEcho (Weird echo on deferred action)";
case 0x0400000F:
return "AN_NoConsole (Couldn't open console.device)";
case 0x04000010:
return "AN_NoISem (Intuition skipped obtaining a sem)";
case 0x04000011:
return "AN_ISemOrder (Intuition obtained a sem in bad order)";
case 0x07000000: /* dos.library alerts */
return "AN_Startup (Error initializing DOS)";
case 0x07010001:
return "AN_StartMem (No memory at DOS startup)";
case 0x07000002:
return "AN_EndTask (Task could not be terminated)";
case 0x07000003:
return "AN_QPktFail (Invalid link from DosPacket to Message)";
case 0x07000004:
return "AN_AsyncPkt (Unexpected packet received)";
case 0x07000005:
return "AN_FreeVec (Incorrect length in FreeVec)";
case 0x07000006:
return "AN_DiskBlkSeq (Disk block sequence error)";
case 0x07000007:
return "AN_BitMap (Defective bitmap)";
case 0x07000008:
return "AN_KeyFree (Block already free)";
case 0x07000009:
return "AN_BadChkSum (Invalid block checksum)";
case 0x0700000A:
return "AN_DiskError (Disk error)";
case 0x0700000B:
return "AN_KeyRange (Block number outside valid range)";
case 0x0700000C:
return "AN_BadOverlay (Error in overlay supervisor)";
case 0x0700000D:
return "AN_BadInitFunc (Invalid shell initialization packet)";
case 0x0700000E:
return "AN_FileReclosed (FileHandle closed more than once)";
case 0x08000001: /* ramlib alerts */
return "AN_BadSegList (Overlay in shared library)";
case 0x0A000001: /* expansion.library alerts */
return "AN_BadExpansionFree (Expansion slot already free)";
case 0x11000001: /* console.device alerts */
return "AN_NoWindow (Can't open initial window)";
case 0x14000001: /* trackdisk.device alerts */
return "AN_TDCalibSeek (Seek error during calibration)";
case 0x14000002:
return "AN_TDDelay (Timer error while waiting)";
case 0x15000001: /* timer.device alerts */
return "AN_TMBadReq (Invalid timerequest)";
case 0x15000002:
return "AN_TMBadSupply (No ticks from power supply)";
case 0x21000001: /* disk.resource alerts */
return "AN_DRHasDisk (Unit already active)";
case 0x21000002:
return "AN_DRIntNoAct (Interrupt without an active unit)";
case 0x30000001: /* strap alerts */
return "AN_BootError (Boot code returned an error)";
case 0x31000001: /* Workbench alerts */
if (alertnum & AT_DeadEnd) return "AN_NoFonts (Unable to open default font)";
else return "AN_WBBadStartupMsg1 (Bad StartupMsg returned)";
case 0x31000002:
return "AN_WBBadStartupMsg2 (Bad StartupMsg returned)";
case 0x31000003:
return "AN_WBBadIOMsg (Unrecognized internal message)";
case 0x31010004:
return "AN_WBInitPotionAllocDrawer";
case 0x31010005:
return "AN_WBCreateWBMenusCreateMenus1";
case 0x31010006:
return "AN_WBCreateWBMenusCreateMenus2";
case 0x31010007:
return "AN_WBLayoutWBMenusLayoutMenus";
case 0x31010008:
return "AN_WBAddToolMenuItem";
case 0x31010009:
return "AN_WBReLayoutToolMenu";
case 0x3101000A:
return "AN_WBInitTimer";
case 0x3101000B:
return "AN_WBInitLayerDemon";
case 0x3101000C:
return "AN_WBInitWBGels";
case 0x3101000D:
return "AN_WBInitScreenAndWindows1";
case 0x3101000E:
return "AN_WBInitScreenAndWindows2";
case 0x3101000F:
return "AN_WBInitScreenAndWindows3";
case 0x31010010:
return "AN_WBMAlloc";
case 0x3e090001: /* mmu.library alerts */
return "AN_ContextOpen (Context still in use at Expunge())";
case 0x3e018005:
return "AN_BadFreePool (Internal memory pool is damaged)";
case 0x3e018001:
return "AN_NoPoolMem (No memory to build internal pool)";
case 0x3e018002:
return "AN_NoContext (No memory to build the context)";
case 0x3e000002:
return "AN_MMUInit (MMU Init vector failed)";
case 0x3e000003:
return "AN_IllegalTT (Illegal Transparent Translation mode)";
case 0x3e000004:
return "AN_IllegalMMU (MMU table layout not supported)";
case 0x3e000005:
return "AN_BadContext (Context contains unaligned mappings)";
case 0x3e000006:
return "AN_BadTable (MMU table has been damaged)";
case 0x3e000007:
return "AN_FreeActive (Attempt to release an active context)";
case 0x3e000008:
return "AN_MapHole (Mapping contains undefined areas)";
case 0x3e000009:
return "AN_Phase (Unexpected context change required)";
case 0x3e00000a:
return "AN_BuildError (Lower tree level built failed)";
case 0x3e00000b:
return "AN_ConfigBroken (MMU config parameters invalid)";
case 0x3e00000c:
return "AN_NoRoot (No valid root pointer for context)";
case 0x3e00000d:
return "AN_NoCatcher (No catcher port for exceptions)";
case 0x3e00000e:
return "AN_ExcptBusy (Attempt to release a busy exception)";
case 0x3e00000f:
return "AN_NotCaller (Bad message hook release attempt)";
case 0x3e000073:
return "AN_QueueDaemon (Invalid reply from exception daemon)";
case 0x3e000010:
return "AN_LineWB (Unhandled line writeback fault)";
case 0x3e000011:
return "AN_LineRB (Unhandled line fetch fault)";
case 0x3e000012:
return "AN_GhostMovem (Invalid movem fault detected)";
case 0x3e000013:
return "AN_CheckMMU (CheckMMU couldn't repair test page)";
case 0x3e000014:
return "AN_BadDMA (Bad DMA transfer initiated)";
case 0x3e000015:
return "AN_PostSetup (Memory layout changed after setup)";
case 0x3e000016:
return "AN_NoMapMem (Free non-RemapSize() aligned memory)";
case 0x40000001: /* sysmon.library alerts */
return "AN_smNoTaskInfo (No TaskInfo structure found)";
case 0x40010002:
return "AN_smNoTIMem (No memory for TaskInfo at startup)";
case 0x40010003:
return "AN_smSysLogBuf (No memory for syslog buffers)";
case 0x40000004:
return "AN_BadSysLogMsg (Bad SysLogMsg received by server)";
case 0x40010005:
return "AN_smNoLastGuru (No memory for LastGuru buffer)";
case 0x40010006:
return "AN_smNoAlertMem (No memory for alert.hook module)";
case 0x40000007:
return "AN_smSuperTaskSwitch (TaskSwitch in Supervisor mode)";
case 0x50010001: /* vdisk.device alerts */
return "AN_VDRootMem (No memory for root structure)";
case 0x50010002:
return "AN_VDUnitMem (No memory for unit structure)";
case 0x50010003:
return "AN_VDReAlloc (Memory reallocation failed)";
case 0x50010004:
return "AN_VDAllocAbs (AllocAbs failed in AllocReverse)";
case 0x50000005:
return "AN_VDBadStartup (Error in Unit Startup)";
case 0x50010006:
return "AN_VDBadRootLoc (Root Structure in bad memory)";
case 0x70000001: /* ErrorLogD alerts */
return "AN_elBadMessage (Unexpected message at HellGate)";
case 0x700B0002:
return "AN_elLoggerFail (Couldn't start logger process)";
case 0x70000003:
return "AN_elNoHellGate (Couldn't find HellGate semaphore)";
case 0x70000004:
return "AN_elBadEvilLst (Evil List is corrupted)";
case 0x70000005:
return "AN_elNoDoomNode (Couldn't find DoomNode)";
default:
if (num & 0x00008000) return "(Generic alert)";
else return "(Unknown alert code)";
}
}
static char *cpustr(UWORD cpuflags)
{
if (cpuflags & AFF_68060) return "68060";
else if (cpuflags & AFF_68040) return "68040";
else if (cpuflags & AFF_68030) return "68030";
else if (cpuflags & AFF_68020) return "68020";
else if (cpuflags & AFF_68010) return "68010";
else return "68000";
}