Various minor things done to project files Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way) Updated regex project file and makefile --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401971
		
			
				
	
	
		
			174 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*  Abstract Machine for the Pawn compiler, debugger support
 | |
|  *
 | |
|  *  This file contains extra definitions that are convenient for debugger
 | |
|  *  support.
 | |
|  *
 | |
|  *  Copyright (c) ITB CompuPhase, 2005
 | |
|  *
 | |
|  *  This software is provided "as-is", without any express or implied warranty.
 | |
|  *  In no event will the authors be held liable for any damages arising from
 | |
|  *  the use of this software.
 | |
|  *
 | |
|  *  Permission is granted to anyone to use this software for any purpose,
 | |
|  *  including commercial applications, and to alter it and redistribute it
 | |
|  *  freely, subject to the following restrictions:
 | |
|  *
 | |
|  *  1.  The origin of this software must not be misrepresented; you must not
 | |
|  *      claim that you wrote the original software. If you use this software in
 | |
|  *      a product, an acknowledgment in the product documentation would be
 | |
|  *      appreciated but is not required.
 | |
|  *  2.  Altered source versions must be plainly marked as such, and must not be
 | |
|  *      misrepresented as being the original software.
 | |
|  *  3.  This notice may not be removed or altered from any source distribution.
 | |
|  *
 | |
|  *  Version: $Id$
 | |
|  */
 | |
| 
 | |
| #ifndef AMXDBG_H_INCLUDED
 | |
| #define AMXDBG_H_INCLUDED
 | |
| 
 | |
| #ifndef AMX_H_INCLUDED
 | |
|   #include "amx.h"
 | |
| #endif
 | |
| 
 | |
| #ifdef  __cplusplus
 | |
| extern  "C" {
 | |
| #endif
 | |
| 
 | |
| /* Some compilers do not support the #pragma align, which should be fine. Some
 | |
|  * compilers give a warning on unknown #pragmas, which is not so fine...
 | |
|  */
 | |
| #if defined SN_TARGET_PS2 || defined __GNUC__
 | |
|   #define AMX_NO_ALIGN
 | |
| #endif
 | |
| 
 | |
| #if defined __GNUC__
 | |
|   #define PACKED        __attribute__((packed))
 | |
| #else
 | |
|   #define PACKED
 | |
| #endif
 | |
| 
 | |
| #if !defined AMX_NO_ALIGN
 | |
|   #if defined LINUX || defined __FreeBSD__
 | |
|     #pragma pack(1)         /* structures must be packed (byte-aligned) */
 | |
|   #elif defined MACOS && defined __MWERKS__
 | |
| 	#pragma options align=mac68k
 | |
|   #else
 | |
|     #pragma pack(push)
 | |
|     #pragma pack(1)         /* structures must be packed (byte-aligned) */
 | |
|     #if defined __TURBOC__
 | |
|       #pragma option -a-    /* "pack" pragma for older Borland compilers */
 | |
|     #endif
 | |
|   #endif
 | |
| #endif
 | |
| 
 | |
| typedef struct tagAMX_DBG_HDR {
 | |
|   int32_t size          PACKED; /* size of the debug information chunk */
 | |
|   uint16_t magic        PACKED; /* signature, must be 0xf1ef */
 | |
|   char    file_version;         /* file format version */
 | |
|   char    amx_version;          /* required version of the AMX */
 | |
|   int16_t flags         PACKED; /* currently unused */
 | |
|   int16_t files         PACKED; /* number of entries in the "file" table */
 | |
|   int16_t lines         PACKED; /* number of entries in the "line" table */
 | |
|   int16_t symbols       PACKED; /* number of entries in the "symbol" table */
 | |
|   int16_t tags          PACKED; /* number of entries in the "tag" table */
 | |
|   int16_t automatons    PACKED; /* number of entries in the "automaton" table */
 | |
|   int16_t states        PACKED; /* number of entries in the "state" table */
 | |
| } PACKED AMX_DBG_HDR;
 | |
| #define AMX_DBG_MAGIC   0xf1ef
 | |
| 
 | |
| typedef struct tagAMX_DBG_FILE {
 | |
|   ucell   address       PACKED; /* address in the code segment where generated code (for this file) starts */
 | |
|   const char name[1];           /* ASCII string, zero-terminated */
 | |
| } PACKED AMX_DBG_FILE;
 | |
| 
 | |
| typedef struct tagAMX_DBG_LINE {
 | |
|   ucell   address       PACKED; /* address in the code segment where generated code (for this line) starts */
 | |
|   int32_t line          PACKED; /* line number */
 | |
| } PACKED AMX_DBG_LINE;
 | |
| 
 | |
| typedef struct tagAMX_DBG_SYMBOL {
 | |
|   ucell   address       PACKED; /* address in the data segment or relative to the frame */
 | |
|   int16_t tag           PACKED; /* tag for the symbol */
 | |
|   ucell   codestart     PACKED; /* address in the code segment from which this symbol is valid (in scope) */
 | |
|   ucell   codeend       PACKED; /* address in the code segment until which this symbol is valid (in scope) */
 | |
|   char    ident;                /* kind of symbol (function/variable) */
 | |
|   char    vclass;               /* class of symbol (global/local) */
 | |
|   int16_t dim           PACKED; /* number of dimensions */
 | |
|   const char name[1];           /* ASCII string, zero-terminated */
 | |
| } PACKED AMX_DBG_SYMBOL;
 | |
| 
 | |
| typedef struct tagAMX_DBG_SYMDIM {
 | |
|   int16_t tag           PACKED; /* tag for the array dimension */
 | |
|   ucell   size          PACKED; /* size of the array dimension */
 | |
| } PACKED AMX_DBG_SYMDIM;
 | |
| 
 | |
| typedef struct tagAMX_DBG_TAG {
 | |
|   int16_t tag           PACKED; /* tag id */
 | |
|   const char name[1];           /* ASCII string, zero-terminated */
 | |
| } PACKED AMX_DBG_TAG;
 | |
| 
 | |
| typedef struct tagAMX_DBG_MACHINE {
 | |
|   int16_t automaton     PACKED; /* automaton id */
 | |
|   ucell address         PACKED; /* address of state variable */
 | |
|   const char name[1];           /* ASCII string, zero-terminated */
 | |
| } PACKED AMX_DBG_MACHINE;
 | |
| 
 | |
| typedef struct tagAMX_DBG_STATE {
 | |
|   int16_t state         PACKED; /* state id */
 | |
|   int16_t automaton     PACKED; /* automaton id */
 | |
|   const char name[1];           /* ASCII string, zero-terminated */
 | |
| } PACKED AMX_DBG_STATE;
 | |
| 
 | |
| typedef struct tagAMX_DBG {
 | |
|   AMX_DBG_HDR     _FAR *hdr         PACKED; /* points to the AMX_DBG header */
 | |
|   AMX_DBG_FILE    _FAR **filetbl    PACKED;
 | |
|   AMX_DBG_LINE    _FAR *linetbl     PACKED;
 | |
|   AMX_DBG_SYMBOL  _FAR **symboltbl  PACKED;
 | |
|   AMX_DBG_TAG     _FAR **tagtbl     PACKED;
 | |
|   AMX_DBG_MACHINE _FAR **automatontbl PACKED;
 | |
|   AMX_DBG_STATE   _FAR **statetbl   PACKED;
 | |
| } PACKED AMX_DBG;
 | |
| 
 | |
| #if !defined iVARIABLE
 | |
|   #define iVARIABLE  1  /* cell that has an address and that can be fetched directly (lvalue) */
 | |
|   #define iREFERENCE 2  /* iVARIABLE, but must be dereferenced */
 | |
|   #define iARRAY     3
 | |
|   #define iREFARRAY  4  /* an array passed by reference (i.e. a pointer) */
 | |
|   #define iFUNCTN    9
 | |
| #endif
 | |
| 
 | |
| 
 | |
| int AMXAPI dbg_FreeInfo(AMX_DBG *amxdbg);
 | |
| int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, void *dbg_addr);
 | |
| 
 | |
| int AMXAPI dbg_LookupFile(AMX_DBG *amxdbg, ucell address, const char **filename);
 | |
| int AMXAPI dbg_LookupFunction(AMX_DBG *amxdbg, ucell address, const char **funcname);
 | |
| int AMXAPI dbg_LookupLine(AMX_DBG *amxdbg, ucell address, long *line);
 | |
| 
 | |
| int AMXAPI dbg_GetFunctionAddress(AMX_DBG *amxdbg, const char *funcname, const char *filename, ucell *address);
 | |
| int AMXAPI dbg_GetLineAddress(AMX_DBG *amxdbg, long line, const char *filename, ucell *address);
 | |
| int AMXAPI dbg_GetAutomatonName(AMX_DBG *amxdbg, int automaton, const char **name);
 | |
| int AMXAPI dbg_GetStateName(AMX_DBG *amxdbg, int state, const char **name);
 | |
| int AMXAPI dbg_GetTagName(AMX_DBG *amxdbg, int tag, const char **name);
 | |
| int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr, const AMX_DBG_SYMBOL **sym);
 | |
| int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX_DBG_SYMDIM **symdim);
 | |
| 
 | |
| 
 | |
| #if !defined AMX_NO_ALIGN
 | |
|   #if defined LINUX || defined __FreeBSD__
 | |
|     #pragma pack()    /* reset default packing */
 | |
|   #elif defined MACOS && defined __MWERKS__
 | |
|     #pragma options align=reset
 | |
|   #else
 | |
|     #pragma pack(pop) /* reset previous packing */
 | |
|   #endif
 | |
| #endif
 | |
| 
 | |
| #ifdef  __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* AMXDBG_H_INCLUDED */
 | |
| 
 |