/* ** $RCSfile: AlertDump.c,v $ ** $Filename: AlertDump.c $ ** $Revision: 1.3 $ ** $Date: 2001/04/28 19:51:58 $ ** ** sysmon.library support command AlertDump (version 1.5) ** ** (C) Copyright 1999-2002 by Etienne Vogt */ #include #include #include #include #include #define __USE_SYSBASE #include #include #include #include #include #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.5 (6.1.2002)"; 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_MEMLib: /* THOR subsystem codes */ return "memory.library"; case AN_MMULib: return "mmu.library"; case 0x3f000000: return "680x0.library"; case 0x40000000: return "sysmon.library"; /* my subsystem codes */ 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 0x0000803d: return "memory.library"; case 0x0000803e: return "mmu.library"; case 0x0000803f: return "680x0.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 Not a Number)"; 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 0x3d000001: /* memory.library alerts (THOR) */ return "AN_MEMPageSetup (Page modification failed)"; case 0x3d000002: return "AN_MEMQpkt (Swap daemon packet failure)"; case 0x3d000003: return "AN_MEMCtxtInv (Invalid context found)"; case 0x3d000004: return "AN_MEMCmdInv (Invalid swap daemon command)"; case 0x3d000005: return "AN_MEMInvFree (Invalid freemem)"; case 0x3d000006: return "AN_MEMFreeFail (Releasing memory pool failed)"; case 0x3d000007: return "AN_MEMDupKey (Duplicate key found)"; 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 (Illegal MMU table layout)"; 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 0x3e000017: return "AN_NoMemMemList (AddMemList() MMU rebuild failed)"; case 0x3e000018: return "AN_NoMemAddConf (AddConfigDev() MMU rebuild failed)"; case 0x3e090009: return "AN_FreeCtxTwice (Child context detached twice)"; case 0x3e001005: return "AN_BadShare (Can't share with non-shared context)"; case 0x3e12800a: return "AN_NoResExp (No expansion library module)"; case 0x3f000001: /* THOR 680x0.libraries alerts */ return "AN_ResVector (Reserved library vector called)"; case 0x3f000002: if (alertnum & AT_DeadEnd) return "AN_FPSPFmtErr (Invalid FPU stack format)"; else return "AN_Zombie (ColdReboot() didn't reboot)"; case 0x3f000015: return "AN_PostSetup (Configuration changed after setup)"; 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 0x40000008: return "AN_smInconSchedState (Inconsistant Scheduling State)"; 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"; }