mirror of
https://github.com/MacPaw/XADMaster.git
synced 2025-08-29 03:23:48 +02:00
660 lines
22 KiB
C
Executable file
660 lines
22 KiB
C
Executable file
#ifndef XADMASTER_DEBUG_C
|
|
#define XADMASTER_DEBUG_C
|
|
|
|
/* $Id: debug.c,v 1.17 2005/06/23 14:54:37 stoecker Exp $
|
|
the debug stuff
|
|
|
|
XAD library system for archive handling
|
|
Copyright (C) 1998 and later by Dirk Stöcker <soft@dstoecker.de>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <stdarg.h>
|
|
#include "functions.h"
|
|
static void DoDebug(xadUINT32 mode, const xadSTRING *fmt, xadTAGPTR tags,
|
|
va_list va);
|
|
|
|
#ifdef AMIGA
|
|
#ifdef SysBase
|
|
#undef SysBase
|
|
#endif
|
|
#include <exec/types.h>
|
|
#include <proto/exec.h>
|
|
#include <proto/dos.h>
|
|
#include <proto/utility.h>
|
|
#include <proto/xadmaster.h>
|
|
#include <utility/tagitem.h>
|
|
#include <dos/var.h>
|
|
#include "SDI_compiler.h"
|
|
|
|
#ifdef __MORPHOS__
|
|
#include <exec/rawfmt.h>
|
|
|
|
typedef APTR (*putchtype)(APTR, UBYTE);
|
|
APTR (*function)(APTR, UBYTE);
|
|
|
|
static xadUINT32 normfunc(xadUINT32 pd, UBYTE c)
|
|
{
|
|
UBYTE d = c;
|
|
if (c)
|
|
Write(pd, &d, 1);
|
|
|
|
return pd;
|
|
}
|
|
|
|
static xadUINT32 errfunc(xadUINT32 pd, UBYTE c)
|
|
{
|
|
UBYTE d = c;
|
|
if (c)
|
|
Write(Output(), &d, 1);
|
|
|
|
return pd;
|
|
}
|
|
|
|
#define OutputDebugVA(fmt,func,pd,args) VNewRawDoFmt(fmt,func,pd,args)
|
|
#else /* __MORPHOS__ */
|
|
typedef void (*putchtype) ();
|
|
ASM(void) (*function)(REG(d0, UBYTE), REG(a3, xadUINT32)) = 0;
|
|
|
|
extern LONG __stdargs KPutChar(LONG);
|
|
extern LONG __stdargs DPutChar(LONG);
|
|
|
|
static ASM(void) serfunc(REG(d0, UBYTE c), REG(a3, xadUINT32 pd))
|
|
{ if(c) KPutChar(c); }
|
|
|
|
static ASM(void) parfunc(REG(d0, UBYTE c), REG(a3, xadUINT32 pd))
|
|
{ if(c) DPutChar(c); }
|
|
|
|
static ASM(void) normfunc(REG(d0, UBYTE c), REG(a3, xadUINT32 pd))
|
|
{
|
|
UBYTE d = c;
|
|
if(c)
|
|
Write(pd, &d, 1);
|
|
}
|
|
|
|
static ASM(void) errfunc(REG(d0, UBYTE c), REG(a3, xadUINT32 pd))
|
|
{
|
|
UBYTE d = c;
|
|
if(c)
|
|
Write(Output(), &d, 1);
|
|
}
|
|
|
|
#define OutputDebugVA(fmt,func,pd,args) RawDoFmt(fmt,args,func,pd)
|
|
#endif /* __MORPHOS__ */
|
|
#define outfunc errfunc
|
|
|
|
#define OutputDebug(fmt,func,pd) OutputDebugArgs(fmt,func,pd)
|
|
static xadPTR STDARGS OutputDebugArgs(const xadSTRING *fmt, putchtype func,
|
|
xadPTR pd, ...)
|
|
{
|
|
va_list args;
|
|
xadPTR ret;
|
|
|
|
va_start(args, pd);
|
|
ret = OutputDebugVA(fmt,func,pd,args);
|
|
va_end(args);
|
|
|
|
return ret;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
static xadUINT32 DebugPrintFlag(putchtype func, xadPTR fh, xadUINT32 flag,
|
|
const xadSTRING *flagtext, xadUINT32 i)
|
|
{
|
|
if(i & flag)
|
|
{
|
|
OutputDebug(flagtext, func, fh);
|
|
i &= ~flag;
|
|
if(i)
|
|
OutputDebug("|", func, fh);
|
|
}
|
|
return i;
|
|
}
|
|
#define PrintFlag(a, b) DebugPrintFlag((putchtype) function, fh, a, #a, b)
|
|
#endif /* DEBUG */
|
|
|
|
#ifdef DEBUGRESOURCE
|
|
void DebugResource(struct xadMasterBaseP *xadMasterBase,
|
|
const xadSTRING *format, ...)
|
|
{
|
|
if(format > (xadSTRPTR)1)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_RESOURCE, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
else
|
|
{
|
|
struct xadObject *obj;
|
|
struct Task *t = 0;
|
|
|
|
if(format != (xadSTRPTR)1)
|
|
t = FindTask(NULL);
|
|
/*
|
|
else
|
|
{
|
|
DebugResource(xadMasterBase, "LibExpunge: resource checkup");
|
|
}
|
|
*/
|
|
ObtainSemaphoreShared(&xadMasterBase->xmb_ResourceLock);
|
|
for(obj = xadMasterBase->xmb_Resource; obj; obj = obj->xo_Last)
|
|
{
|
|
if(obj->xo_Cookie != XADOBJCOOKIE)
|
|
{
|
|
DebugResource(xadMasterBase,
|
|
"xadFreeObjectA: %s ($%08lx) has cookie $%08lx",
|
|
xadGetObjectTypeName(obj->xo_Type), obj+1, obj->xo_Cookie);
|
|
}
|
|
if(format || t == obj->xo_Task)
|
|
{
|
|
DebugResource(xadMasterBase, "Lib%s: %s ($%08lx) task $%08lx size %ld not freed",
|
|
format ? "Expunge" : "Close",
|
|
xadGetObjectTypeName(obj->xo_Type), obj+1, obj->xo_Task, obj->xo_Size);
|
|
}
|
|
}
|
|
ReleaseSemaphore(&xadMasterBase->xmb_ResourceLock);
|
|
}
|
|
}
|
|
#endif /* DEBUGRESOURCE */
|
|
#else /* AMIGA */
|
|
|
|
#ifdef DEBUG
|
|
static xadUINT32 DebugPrintFlag(FILE *fh, xadUINT32 flag,
|
|
const xadSTRING *flagtext, xadUINT32 i)
|
|
{
|
|
if(i & flag)
|
|
{
|
|
fprintf(fh, flagtext);
|
|
i &= ~flag;
|
|
if(i)
|
|
fprintf(fh, "|");
|
|
}
|
|
return i;
|
|
}
|
|
|
|
typedef xadUINT8 putchtype;
|
|
xadUINT8 function = 0;
|
|
|
|
#define OutputDebug(_fmt,_func,_fh) fprintf(_fh,_fmt)
|
|
#define OutputDebugArgs(_fmt,_func,_fh,...) fprintf(_fh,_fmt,##__VA_ARGS__)
|
|
#define OutputDebugVA(_fmt,_func,_fh,_va) vfprintf(_fh,_fmt,_va)
|
|
#define PrintFlag(a,b) DebugPrintFlag(fh, a, #a, b)
|
|
|
|
#define normfunc 'n'
|
|
#define errfunc 'e'
|
|
#define outfunc 'o'
|
|
|
|
#endif /* DEBUG */
|
|
|
|
#ifdef DEBUGRESOURCE
|
|
void DebugResource(struct xadMasterBaseP *xadMasterBase,
|
|
const xadSTRING *format, ...)
|
|
{
|
|
if(format)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_RESOURCE, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
else
|
|
{
|
|
struct xadObject *obj;
|
|
for(obj = xadMasterBase->xmb_Resource; obj; obj = obj->xo_Last)
|
|
{
|
|
if(obj->xo_Cookie != XADOBJCOOKIE)
|
|
{
|
|
DebugResource(xadMasterBase,
|
|
"xadFreeObjectA: %s ($%08lx) has cookie $%08lx",
|
|
xadGetObjectTypeName(obj->xo_Type), obj+1, obj->xo_Cookie);
|
|
}
|
|
DebugResource(xadMasterBase, "Lib: %s ($%08lx) size %ld not freed",
|
|
xadGetObjectTypeName(obj->xo_Type), obj+1, obj->xo_Size);
|
|
}
|
|
}
|
|
}
|
|
#endif /* DEBUGRESOURCE */
|
|
#endif /* AMIGA */
|
|
|
|
#ifdef DEBUG
|
|
void DebugFlagged(xadUINT32 flags, const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(flags, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugTagList(const xadSTRING *format, xadTAGPTR tags, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, tags);
|
|
DoDebug(DEBUGFLAG_RUNTIME|DEBUGFLAG_TAGLIST, format, tags, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugTagListOther(const xadSTRING *format, xadTAGPTR tags, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, tags);
|
|
DoDebug(DEBUGFLAG_OTHER|DEBUGFLAG_TAGLIST, format, tags, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugTagListMem(const xadSTRING *format, xadTAGPTR tags, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, tags);
|
|
DoDebug(DEBUGFLAG_MEM|DEBUGFLAG_RUNTIME|DEBUGFLAG_TAGLIST, format, tags, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugFileSearched(const struct xadArchiveInfo *ai,
|
|
const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
if(ai->xai_InName)
|
|
DebugFlagged(DEBUGFLAG_SEARCHED|DEBUGFLAG_CONTINUESTART,
|
|
"The file %s is searched by client %s: ", ai->xai_InName,
|
|
ai->xai_Client->xc_ArchiverName);
|
|
else
|
|
DebugFlagged(DEBUGFLAG_SEARCHED|DEBUGFLAG_CONTINUESTART,
|
|
"The current file is searched by client %s: ",
|
|
ai->xai_Client->xc_ArchiverName);
|
|
DoDebug(DEBUGFLAG_SEARCHED|DEBUGFLAG_CONTINUEEND, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugClient(const struct xadArchiveInfo *ai, const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DebugFlagged(DEBUGFLAG_CLIENT|DEBUGFLAG_CONTINUESTART,
|
|
"Client %s: ", ai->xai_Client->xc_ArchiverName);
|
|
DoDebug(DEBUGFLAG_CLIENT|DEBUGFLAG_CONTINUEEND, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugError(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_ERROR, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugRunTime(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_RUNTIME, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugOther(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_OTHER, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugMem(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_MEM, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugMemError(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_MEM|DEBUGFLAG_ERROR, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugHook(const xadSTRING *format, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, format);
|
|
DoDebug(DEBUGFLAG_HOOK, format, 0, va);
|
|
va_end(va);
|
|
}
|
|
|
|
void DebugHookTagList(const xadSTRING *format, xadTAGPTR taglist, ...)
|
|
{
|
|
va_list va;
|
|
va_start(va, taglist);
|
|
DoDebug(DEBUGFLAG_HOOK|DEBUGFLAG_TAGLIST, format, taglist, va);
|
|
va_end(va);
|
|
}
|
|
#endif /* DEBUG */
|
|
|
|
static xadUINT32 deb_flags = 0;
|
|
|
|
static void DoDebug(xadUINT32 mode, const xadSTRING *fmt, xadTAGPTR tags,
|
|
va_list data)
|
|
{
|
|
xadUINT32 i;
|
|
xadUINT32 Flags = 0;
|
|
|
|
if(!function && (deb_flags & DEBUGFLAG_STATIC))
|
|
return;
|
|
|
|
#ifdef AMIGA
|
|
Forbid();
|
|
#endif
|
|
|
|
if((deb_flags & DEBUGFLAG_STATIC)
|
|
|| (mode & (DEBUGFLAG_CONTINUE|DEBUGFLAG_CONTINUEEND)))
|
|
Flags = deb_flags;
|
|
else
|
|
{
|
|
xadSTRING Mode[17] = "";
|
|
#ifdef AMIGA
|
|
GetVar("XADDEBUG", (xadSTRPTR) &Mode, sizeof(Mode)-1, GVF_GLOBAL_ONLY);
|
|
#else
|
|
const xadSTRING *modePtr = getenv("XADDEBUG");
|
|
if (modePtr)
|
|
strncpy(Mode, modePtr, sizeof(Mode)-1);
|
|
#endif
|
|
function = 0;
|
|
|
|
for(i=0; Mode[i] && i < 15; ++i)
|
|
{
|
|
switch(Mode[i])
|
|
{
|
|
case 'A': Flags |= DEBUGFLAG_TAGLIST|DEBUGFLAG_RUNTIME|DEBUGFLAG_HOOK
|
|
|DEBUGFLAG_ERROR|DEBUGFLAG_OTHER|DEBUGFLAG_MEM
|
|
|DEBUGFLAG_FLAGS|DEBUGFLAG_RESOURCE|DEBUGFLAG_CLIENT
|
|
|DEBUGFLAG_SEARCHED; break;
|
|
case 'M': Flags |= DEBUGFLAG_MEM; break;
|
|
case 'O': Flags |= DEBUGFLAG_OTHER; break;
|
|
case 'E': Flags |= DEBUGFLAG_ERROR; break;
|
|
case 'C': Flags |= DEBUGFLAG_RESOURCE; break;
|
|
case 'D': Flags |= DEBUGFLAG_CLIENT|DEBUGFLAG_SEARCHED; break;
|
|
case 'F': Flags |= DEBUGFLAG_FLAGS; break;
|
|
case 'H': Flags |= DEBUGFLAG_HOOK; break;
|
|
case 'R': Flags |= DEBUGFLAG_RUNTIME; break;
|
|
case 'T': Flags |= DEBUGFLAG_TAGLIST; break;
|
|
case 'S': Flags |= DEBUGFLAG_STATIC; break;
|
|
|
|
#ifdef __MORPHOS__
|
|
case 's': function = RAWFMTFUNC_SERIAL; break;
|
|
#elif defined(AMIGA)
|
|
case 's': function = serfunc; break;
|
|
case 'p': function = parfunc; break;
|
|
#endif
|
|
case 'f': function = normfunc; break;
|
|
case 'e': function = errfunc; break;
|
|
case 'o': function = outfunc; break;
|
|
case 'n': function = 0; break;
|
|
}
|
|
}
|
|
deb_flags = Flags;
|
|
}
|
|
|
|
mode &= Flags|DEBUGFLAG_CONTINUE|DEBUGFLAG_CONTINUEEND
|
|
|DEBUGFLAG_CONTINUESTART;
|
|
|
|
if(mode & (~(DEBUGFLAG_TAGLIST|DEBUGFLAG_STATIC|DEBUGFLAG_CONTINUE
|
|
|DEBUGFLAG_CONTINUEEND|DEBUGFLAG_CONTINUESTART)))
|
|
{
|
|
#ifdef AMIGA
|
|
xadPTR fh = 0;
|
|
|
|
if(function==normfunc)
|
|
{
|
|
if((fh = (xadPTR) Open("T:xadMasterOut", MODE_READWRITE)))
|
|
{
|
|
Seek((BPTR)fh, 0, OFFSET_END);
|
|
}
|
|
else
|
|
function = 0;
|
|
}
|
|
#else
|
|
FILE *fh = NULL;
|
|
|
|
switch(function)
|
|
{
|
|
case normfunc: fh = fopen(".libxad-debug", "a"); break;
|
|
case outfunc: default: fh = stdout; break;
|
|
case errfunc: fh = stderr; break;
|
|
}
|
|
#endif
|
|
|
|
if(function)
|
|
{
|
|
#ifdef AMIGA
|
|
if(!(mode & (DEBUGFLAG_CONTINUE|DEBUGFLAG_CONTINUEEND)))
|
|
{
|
|
i = (xadUINT32) FindTask(0);
|
|
OutputDebugArgs("XadM(%08lx):", (putchtype) function, fh, i);
|
|
}
|
|
#endif
|
|
|
|
OutputDebugVA(fmt, (putchtype) function, fh, data);
|
|
if(!(mode & (DEBUGFLAG_CONTINUESTART|DEBUGFLAG_CONTINUE))
|
|
|| (mode & DEBUGFLAG_CONTINUEEND))
|
|
OutputDebug("\n", (putchtype) function, fh);
|
|
|
|
#ifdef DEBUG
|
|
if(mode & DEBUGFLAG_TAGLIST)
|
|
{
|
|
xadTAGPTR ti;
|
|
while((ti = NextTagItem(&tags)))
|
|
{
|
|
xadUINT32 i[2], dmode = 0;
|
|
const xadSTRING *s;
|
|
|
|
/* dmode == 1 - BOOL data, dmode == 2 - unknown, dmode == 3 - error text */
|
|
switch(ti->ti_Tag)
|
|
{
|
|
case XAD_INSIZE: s = "XAD_INSIZE, %lu"; break;
|
|
case XAD_INFILENAME: s = "XAD_INFILENAME, \"%s\" ($%08lx)"; break;
|
|
case XAD_INFILEHANDLE: s = "XAD_INFILEHANDLE, $%08lx"; break;
|
|
case XAD_INMEMORY: s = "XAD_INMEMORY, $%08lx"; break;
|
|
case XAD_INHOOK: s = "XAD_INHOOK, $%08lx"; break;
|
|
case XAD_INSPLITTED: s = "XAD_INSPLITTED, $%08lx"; break;
|
|
case XAD_INDISKARCHIVE: s = "XAD_INDISKARCHIVE, $%08lx"; break;
|
|
case XAD_INXADSTREAM: s = "XAD_INXADSTREAM, $%08lx"; break;
|
|
#ifdef AMIGA
|
|
case XAD_INDEVICE: s = "XAD_INDEVICE, $%08lx"; break;
|
|
#endif
|
|
case XAD_OUTSIZE: s = "XAD_OUTSIZE, %lu"; break;
|
|
case XAD_OUTFILENAME: s = "XAD_OUTFILENAME, \"%s\" ($%08lx)"; break;
|
|
case XAD_OUTFILEHANDLE: s = "XAD_OUTFILEHANDLE, $%08lx"; break;
|
|
case XAD_OUTMEMORY: s = "XAD_OUTMEMORY, $%08lx"; break;
|
|
case XAD_OUTHOOK: s = "XAD_OUTHOOK, $%08lx"; break;
|
|
#ifdef AMIGA
|
|
case XAD_OUTDEVICE: s = "XAD_OUTDEVICE, $%08lx"; break;
|
|
#endif
|
|
case XAD_OUTXADSTREAM: s = "XAD_OUTXADSTREAM, $%08lx"; break;
|
|
case XAD_OBJNAMESIZE: s = "XAD_OBJNAMESIZE, %lu"; break;
|
|
case XAD_OBJCOMMENTSIZE: s = "XAD_OBJCOMMENTSIZE, %lu"; break;
|
|
case XAD_OBJBLOCKENTRIES: s = "XAD_OBJBLOCKENTRIES, %lu"; break;
|
|
case XAD_OBJPRIVINFOSIZE: s = "XAD_OBJPRIVINFOSIZE, %lu"; break;
|
|
case XAD_NOEXTERN: s = "XAD_NOEXTERN, %s"; dmode = 1; break;
|
|
case XAD_PASSWORD: s = "XAD_PASSWORD, \"%s\" ($%08lx)"; break;
|
|
case XAD_ENTRYNUMBER: s = "XAD_ENTRYNUMBER, %lu"; break;
|
|
case XAD_PROGRESSHOOK: s = "XAD_PROGRESSHOOK, $%08lx"; break;
|
|
case XAD_OVERWRITE: s = "XAD_OVERWRITE, %s"; dmode = 1; break;
|
|
#ifdef AMIGA
|
|
case XAD_IGNOREGEOMETRY: s = "XAD_IGNOREGEOMETRY, %s"; dmode = 1; break;
|
|
case XAD_USESECTORLABELS: s = "XAD_USESECTORLABELS, %s"; dmode = 1; break;
|
|
#endif
|
|
case XAD_LOWCYLINDER: s = "XAD_LOWCYLINDER, %lu"; break;
|
|
case XAD_HIGHCYLINDER: s = "XAD_HIGHCYLINDER, %lu"; break;
|
|
#ifdef AMIGA
|
|
case XAD_VERIFY: s = "XAD_VERIFY, %s"; dmode = 1; break;
|
|
#endif
|
|
case XAD_NOKILLPARTIAL: s = "XAD_NOKILLPARTIAL, %s"; dmode = 1; break;
|
|
#ifdef AMIGA
|
|
case XAD_FORMAT: s = "XAD_FORMAT, %s"; dmode = 1; break;
|
|
#endif
|
|
case XAD_MAKEDIRECTORY: s = "XAD_MAKEDIRECTORY, %s"; dmode = 1; break;
|
|
case XAD_DATEUNIX: s = "XAD_DATEUNIX, %ld"; break;
|
|
case XAD_DATEAMIGA: s = "XAD_DATEAMIGA, %ld"; break;
|
|
case XAD_DATECURRENTTIME: s = "XAD_DATECURRENTTIME"; break;
|
|
case XAD_DATEDATESTAMP: s = "XAD_DATEDATESTAMP, $%08lx"; break;
|
|
case XAD_DATEXADDATE: s = "XAD_DATEXADDATE, $%08lx"; break;
|
|
case XAD_DATECLOCKDATA: s = "XAD_DATECLOCKDATA, $%08lx"; break;
|
|
case XAD_DATEMSDOS: s = "XAD_DATEMSDOS, $%08lx"; break;
|
|
case XAD_DATEMAC: s = "XAD_DATEMAC, $%08lx"; break;
|
|
case XAD_DATECPM: s = "XAD_DATECPM, $%08lx"; break;
|
|
case XAD_DATECPM2: s = "XAD_DATECPM2, $%08lx"; break;
|
|
case XAD_GETDATEUNIX: s = "XAD_GETDATEUNIX, $%08lx"; break;
|
|
case XAD_GETDATEAMIGA: s = "XAD_GETDATEAMIGA, $%08lx"; break;
|
|
#ifdef AMIGA
|
|
case XAD_GETDATEDATESTAMP: s = "XAD_GETDATEDATESTAMP, $%08lx"; break;
|
|
#endif
|
|
case XAD_GETDATEXADDATE: s = "XAD_GETDATEXADDATE, $%08lx"; break;
|
|
#ifdef AMIGA
|
|
case XAD_GETDATECLOCKDATA: s = "XAD_GETDATECLOCKDATA, $%08lx"; break;
|
|
#endif
|
|
case XAD_GETDATEMSDOS: s = "XAD_GETDATEMSDOS, $%08lx"; break;
|
|
case XAD_GETDATEMAC: s = "XAD_GETDATEMAC, $%08lx"; break;
|
|
case XAD_GETDATECPM: s = "XAD_GETDATECPM, $%08lx"; break;
|
|
case XAD_GETDATECPM2: s = "XAD_GETDATECPM2, $%08lx"; break;
|
|
case XAD_PROTAMIGA: s = "XAD_PROTAMIGA, $%08lx"; break;
|
|
case XAD_PROTUNIX: s = "XAD_PROTUNIX, $%08lx"; break;
|
|
case XAD_PROTMSDOS: s = "XAD_PROTMSDOS, $%08lx"; break;
|
|
case XAD_PROTFILEINFO: s = "XAD_PROTFILEINFO, $%08lx"; break;
|
|
case XAD_GETPROTAMIGA: s = "XAD_GETPROTAMIGA, $%08lx"; break;
|
|
case XAD_GETPROTUNIX: s = "XAD_GETPROTUNIX, $%08lx"; break;
|
|
case XAD_GETPROTMSDOS: s = "XAD_GETPROTMSDOS, $%08lx"; break;
|
|
case XAD_GETPROTFILEINFO: s = "XAD_GETPROTFILEINFO, $%08lx"; break;
|
|
case XAD_MAKEGMTDATE: s = "XAD_MAKEGMTDATE, %s", dmode = 1; break;
|
|
case XAD_MAKELOCALDATE: s = "XAD_MAKELOCALDATE, %s", dmode = 1; break;
|
|
case XAD_STARTCLIENT: s = "XAD_STARTCLIENT, $%08lx"; break;
|
|
case XAD_NOEMPTYERROR: s = "XAD_NOEMPTYERROR, %s"; dmode = 1; break;
|
|
case XAD_ARCHIVEINFO: s = "XAD_ARCHIVEINFO, $%08lx"; break;
|
|
case XAD_WASERROR: s = "XAD_WASERROR, \"%s\" (%ld)"; dmode = 3; break;
|
|
case XAD_SECTORLABELS: s = "XAD_SECTORLABELS, $%08lx"; break;
|
|
case XAD_INSERTDIRSFIRST: s = "XAD_INSERTDIRSFIRST, %s"; dmode = 1; break;
|
|
case XAD_SETINPOS: s = "XAD_SETINPOS, %ld"; break;
|
|
case XAD_IGNOREFLAGS: s = "XAD_IGNOREFLAGS, $%08lx"; dmode = 100; break;
|
|
case XAD_ONLYFLAGS: s = "XAD_ONLYFLAGS, $%08lx"; dmode=100; break;
|
|
case XAD_ERRORCODE: s = "XAD_ERRORCODE, $%08lx"; break;
|
|
case XAD_PATHSEPERATOR: s = "XAD_PATHSEPERATOR, $%08lx"; break;
|
|
case XAD_CHARACTERSET: s = "XAD_CHARACTERSET, %ld (%s)"; dmode = 4; break;
|
|
case XAD_STRINGSIZE: s = "XAD_STRINGSIZE, %ld"; break;
|
|
case XAD_CSTRING: s = "XAD_CSTRING, $%08lx"; break;
|
|
case XAD_PSTRING: s = "XAD_PSTRING, $%08lx"; break;
|
|
case XAD_XADSTRING: s = "XAD_XADSTRING, $%08lx"; break;
|
|
case XAD_ADDPATHSEPERATOR: s = "XAD_ADDPATHSEPERATOR, %s"; dmode = 1; break;
|
|
case XAD_NOLEADINGPATH: s = "XAD_NOLEADINGPATH, %s"; dmode = 1; break;
|
|
case XAD_NOTRAILINGPATH: s = "XAD_NOTRAILINGPATH, %s"; dmode = 1; break;
|
|
case XAD_MASKCHARACTERS: s = "XAD_MASKCHARACTERS, $%08lx"; break;
|
|
case XAD_MASKINGCHAR: s = "XAD_MASKINGCHAR, '%lc'"; break;
|
|
case XAD_REQUIREDBUFFERSIZE: s = "XAD_REQUIREDBUFFERSIZE, $%08lx"; break;
|
|
case XAD_USESKIPINFO: s = "XAD_USESKIPINFO, %s"; dmode = 1; break;
|
|
case XAD_EXTENSION: s = "XAD_EXTENSION, \"%s\" ($%08lx)"; break;
|
|
default: s = "$%08lx, $%08lx"; dmode = 2; break;
|
|
}
|
|
switch(dmode)
|
|
{
|
|
case 1: i[0] = ti->ti_Data ? (xadUINT32) "TRUE" : (xadUINT32) "FALSE"; break;
|
|
case 2: i[0] = ti->ti_Tag; i[1] = ti->ti_Data; break;
|
|
#ifdef AMIGA
|
|
case 3: i[0] = (xadUINT32) xadGetErrorText(XADM ti->ti_Data); i[1] = ti->ti_Data; break;
|
|
#else
|
|
/* Special case: We pass a NULL to xadGetErrorText() since we don't have XMB as a global
|
|
variable in Unix. xadGetErrorText() will make an exception for this. */
|
|
case 3: i[0] = (xadUINT32) xadGetErrorText(NULL, ti->ti_Data); i[1] = ti->ti_Data; break;
|
|
#endif
|
|
case 4: i[0] = ti->ti_Data;
|
|
switch(i[0])
|
|
{
|
|
case CHARSET_HOST: i[1] = (xadUINT32) "CHARSET_HOST"; break;
|
|
case CHARSET_UNICODE_UCS2_HOST: i[1] = (xadUINT32) "CHARSET_UNICODE_UCS2_HOST"; break;
|
|
case CHARSET_UNICODE_UCS2_BIGENDIAN: i[1] = (xadUINT32) "CHARSET_UNICODE_UCS2BIGENDIAN"; break;
|
|
case CHARSET_UNICODE_UCS2_LITTLEENDIAN: i[1] = (xadUINT32) "CHARSET_UNICODE_UCS2_LITTLEENDIAN"; break;
|
|
case CHARSET_UNICODE_UTF8: i[1] = (xadUINT32) "CHARSET_UNICODE_UTF8"; break;
|
|
case CHARSET_AMIGA: i[1] = (xadUINT32) "CHARSET_AMIGA"; break;
|
|
case CHARSET_MSDOS: i[1] = (xadUINT32) "CHARSET_MSDOS"; break;
|
|
case CHARSET_MACOS: i[1] = (xadUINT32) "CHARSET_MACOS"; break;
|
|
case CHARSET_C64: i[1] = (xadUINT32) "CHARSET_C64"; break;
|
|
case CHARSET_ATARI_ST: i[1] = (xadUINT32) "CHARSET_ATARI_ST"; break;
|
|
case CHARSET_WINDOWS: i[1] = (xadUINT32) "CHARSET_WINDOWS"; break;
|
|
case CHARSET_ASCII: i[1] = (xadUINT32) "CHARSET_ASCII"; break;
|
|
case CHARSET_ISO_8859_1: i[1] = (xadUINT32) "CHARSET_ISO_8859_1"; break;
|
|
case CHARSET_ISO_8859_15: i[1] = (xadUINT32) "CHARSET_ISO_8859_15"; break;
|
|
case CHARSET_ATARI_ST_US: i[1] = (xadUINT32) "CHARSET_ATARI_ST_US"; break;
|
|
case CHARSET_PETSCII_C64_LC: i[1] = (xadUINT32) "CHARSET_PETSCII_C64_LC"; break;
|
|
case CHARSET_CODEPAGE_437: i[1] = (xadUINT32) "CHARSET_CODEPAGE_437"; break;
|
|
case CHARSET_CODEPAGE_1252: i[1] = (xadUINT32) "CHARSET_CODEPAGE_1252"; break;
|
|
default: i[1] = (xadUINT32) "unknown"; break;
|
|
}
|
|
break;
|
|
default: i[0] = i[1] = ti->ti_Data;
|
|
}
|
|
|
|
OutputDebug(" ", (putchtype) function, fh);
|
|
OutputDebugArgs(s, (putchtype) function, fh, i[0], i[1]);
|
|
if(dmode >= 100 && (Flags & DEBUGFLAG_FLAGS))
|
|
{
|
|
OutputDebug(" ("/*)*/, (putchtype) function, fh);
|
|
switch(dmode)
|
|
{
|
|
case 100:
|
|
i[1] = PrintFlag(XADCF_FILEARCHIVER, i[1]);
|
|
i[1] = PrintFlag(XADCF_DISKARCHIVER, i[1]);
|
|
i[1] = PrintFlag(XADCF_EXTERN, i[1]);
|
|
i[1] = PrintFlag(XADCF_FILESYSTEM, i[1]);
|
|
i[1] = PrintFlag(XADCF_NOCHECKSIZE, i[1]);
|
|
i[1] = PrintFlag(XADCF_DATACRUNCHER, i[1]);
|
|
i[1] = PrintFlag(XADCF_EXECRUNCHER, i[1]);
|
|
i[1] = PrintFlag(XADCF_ADDRESSCRUNCHER, i[1]);
|
|
i[1] = PrintFlag(XADCF_LINKER, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREESPECIALINFO, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREESKIPINFO, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREETEXTINFO, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREETEXTINFOTEXT, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREEFILEINFO, i[1]);
|
|
i[1] = PrintFlag(XADCF_FREEDISKINFO, i[1]);
|
|
}
|
|
if(i[1])
|
|
{
|
|
OutputDebugArgs("$%lx", (putchtype) function, fh, i[1]);
|
|
}
|
|
OutputDebug(/*(*/")", (putchtype) function, fh);
|
|
}
|
|
OutputDebug("\n", (putchtype) function, fh);
|
|
}
|
|
OutputDebug(" TAG_DONE\n", (putchtype) function, fh);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#ifdef AMIGA
|
|
if(fh)
|
|
Close((BPTR)fh);
|
|
#else
|
|
if(fh && function == normfunc)
|
|
fclose(fh);
|
|
#endif
|
|
}
|
|
#ifdef AMIGA
|
|
Permit();
|
|
#endif
|
|
}
|
|
|
|
#endif /* XADMASTER_DEBUG_C */
|