Initial import of amxxpc
This commit is contained in:
parent
f9ca86cee6
commit
f6b91f9258
3984
compiler/amxxpc/amx.cpp
Executable file
3984
compiler/amxxpc/amx.cpp
Executable file
File diff suppressed because it is too large
Load Diff
439
compiler/amxxpc/amx.h
Executable file
439
compiler/amxxpc/amx.h
Executable file
|
@ -0,0 +1,439 @@
|
||||||
|
/* Pawn Abstract Machine (for the Pawn language)
|
||||||
|
*
|
||||||
|
* Copyright (c) ITB CompuPhase, 1997-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$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined FREEBSD && !defined __FreeBSD__
|
||||||
|
#define __FreeBSD__
|
||||||
|
#endif
|
||||||
|
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__
|
||||||
|
#include <sclinux.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AMX_H_INCLUDED
|
||||||
|
#define AMX_H_INCLUDED
|
||||||
|
|
||||||
|
#if defined HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#else
|
||||||
|
#if defined __LCC__ || defined __DMC__ || defined LINUX
|
||||||
|
#if defined HAVE_INTTYPES_H
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#elif !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
|
||||||
|
/* The ISO C99 defines the int16_t and int_32t types. If the compiler got
|
||||||
|
* here, these types are probably undefined.
|
||||||
|
*/
|
||||||
|
#if defined __MACH__
|
||||||
|
#include <ppc/types.h>
|
||||||
|
typedef unsigned short int uint16_t;
|
||||||
|
typedef unsigned long int uint32_t;
|
||||||
|
#elif defined __FreeBSD__
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
typedef short int int16_t;
|
||||||
|
typedef unsigned short int uint16_t;
|
||||||
|
#if defined SN_TARGET_PS2
|
||||||
|
typedef int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#else
|
||||||
|
typedef long int int32_t;
|
||||||
|
typedef unsigned long int uint32_t;
|
||||||
|
#endif
|
||||||
|
#if defined __WIN32__ || defined _WIN32 || defined WIN32
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#define HAVE_I64
|
||||||
|
#elif defined __GNUC__
|
||||||
|
typedef long long int64_t;
|
||||||
|
typedef unsigned long long uint64_t;
|
||||||
|
#define HAVE_I64
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#define HAVE_STDINT_H
|
||||||
|
#endif
|
||||||
|
#if defined _LP64 || defined WIN64 || defined _WIN64
|
||||||
|
#if !defined __64BIT__
|
||||||
|
#define __64BIT__
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_ALLOCA_H
|
||||||
|
#include <alloca.h>
|
||||||
|
#endif
|
||||||
|
#if defined __WIN32__ || defined _WIN32 || defined WIN32 /* || defined __MSDOS__ */
|
||||||
|
#if !defined alloca
|
||||||
|
#define alloca(n) _alloca(n)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined arraysize
|
||||||
|
#define arraysize(array) (sizeof(array) / sizeof((array)[0]))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined PAWN_DLL
|
||||||
|
#if !defined AMX_NATIVE_CALL
|
||||||
|
#define AMX_NATIVE_CALL __stdcall
|
||||||
|
#endif
|
||||||
|
#if !defined AMXAPI
|
||||||
|
#define AMXAPI __stdcall
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* calling convention for native functions */
|
||||||
|
#if !defined AMX_NATIVE_CALL
|
||||||
|
#define AMX_NATIVE_CALL
|
||||||
|
#endif
|
||||||
|
/* calling convention for all interface functions and callback functions */
|
||||||
|
#if !defined AMXAPI
|
||||||
|
#if defined STDECL
|
||||||
|
#define AMXAPI __stdcall
|
||||||
|
#elif defined CDECL
|
||||||
|
#define AMXAPI __cdecl
|
||||||
|
#elif defined GCC_HASCLASSVISIBILITY
|
||||||
|
#define AMXAPI __attribute__ ((visibility("default")))
|
||||||
|
#else
|
||||||
|
#define AMXAPI
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if !defined AMXEXPORT
|
||||||
|
#define AMXEXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* File format version Required AMX version
|
||||||
|
* 0 (original version) 0
|
||||||
|
* 1 (opcodes JUMP.pri, SWITCH and CASETBL) 1
|
||||||
|
* 2 (compressed files) 2
|
||||||
|
* 3 (public variables) 2
|
||||||
|
* 4 (opcodes SWAP.pri/alt and PUSHADDR) 4
|
||||||
|
* 5 (tagnames table) 4
|
||||||
|
* 6 (reformatted header) 6
|
||||||
|
* 7 (name table, opcodes SYMTAG & SYSREQ.D) 7
|
||||||
|
* 8 (opcode STMT, renewed debug interface) 8
|
||||||
|
*/
|
||||||
|
#define CUR_FILE_VERSION 8 /* current file version; also the current AMX version */
|
||||||
|
#define MIN_FILE_VERSION 6 /* lowest supported file format version for the current AMX version */
|
||||||
|
#define MIN_AMX_VERSION 8 /* minimum AMX version needed to support the current file format */
|
||||||
|
|
||||||
|
#if !defined PAWN_CELL_SIZE
|
||||||
|
#define PAWN_CELL_SIZE 32 /* by default, use 32-bit cells */
|
||||||
|
#endif
|
||||||
|
#if PAWN_CELL_SIZE==16
|
||||||
|
typedef uint16_t ucell;
|
||||||
|
typedef int16_t cell;
|
||||||
|
#elif PAWN_CELL_SIZE==32
|
||||||
|
typedef uint32_t ucell;
|
||||||
|
typedef int32_t cell;
|
||||||
|
#elif PAWN_CELL_SIZE==64
|
||||||
|
typedef uint64_t ucell;
|
||||||
|
typedef int64_t cell;
|
||||||
|
#else
|
||||||
|
#error Unsupported cell size (PAWN_CELL_SIZE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define UNPACKEDMAX ((1L << (sizeof(cell)-1)*8) - 1)
|
||||||
|
#define UNLIMITED (~1u >> 1)
|
||||||
|
|
||||||
|
struct tagAMX;
|
||||||
|
typedef cell (AMX_NATIVE_CALL *AMX_NATIVE)(struct tagAMX *amx, cell *params);
|
||||||
|
typedef int (AMXAPI *AMX_CALLBACK)(struct tagAMX *amx, cell index,
|
||||||
|
cell *result, cell *params);
|
||||||
|
typedef int (AMXAPI *AMX_DEBUG)(struct tagAMX *amx);
|
||||||
|
#if !defined _FAR
|
||||||
|
#define _FAR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _MSC_VER
|
||||||
|
#pragma warning(disable:4103) /* disable warning message 4103 that complains
|
||||||
|
* about pragma pack in a header file */
|
||||||
|
#pragma warning(disable:4100) /* "'%$S' : unreferenced formal parameter" */
|
||||||
|
#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__) && !defined AMX_NO_ALIGN
|
||||||
|
#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_NATIVE_INFO {
|
||||||
|
const char _FAR *name PACKED;
|
||||||
|
AMX_NATIVE func PACKED;
|
||||||
|
} PACKED AMX_NATIVE_INFO;
|
||||||
|
|
||||||
|
#define AMX_USERNUM 4
|
||||||
|
#define sEXPMAX 19 /* maximum name length for file version <= 6 */
|
||||||
|
#define sNAMEMAX 31 /* maximum name length of symbol name */
|
||||||
|
|
||||||
|
typedef struct tagAMX_FUNCSTUB {
|
||||||
|
ucell address PACKED;
|
||||||
|
char name[sEXPMAX+1] PACKED;
|
||||||
|
} PACKED AMX_FUNCSTUB;
|
||||||
|
|
||||||
|
typedef struct tagFUNCSTUBNT {
|
||||||
|
ucell address PACKED;
|
||||||
|
uint32_t nameofs PACKED;
|
||||||
|
} PACKED AMX_FUNCSTUBNT;
|
||||||
|
|
||||||
|
/* The AMX structure is the internal structure for many functions. Not all
|
||||||
|
* fields are valid at all times; many fields are cached in local variables.
|
||||||
|
*/
|
||||||
|
typedef struct tagAMX {
|
||||||
|
unsigned char _FAR *base PACKED; /* points to the AMX header plus the code, optionally also the data */
|
||||||
|
unsigned char _FAR *data PACKED; /* points to separate data+stack+heap, may be NULL */
|
||||||
|
AMX_CALLBACK callback PACKED;
|
||||||
|
AMX_DEBUG debug PACKED; /* debug callback */
|
||||||
|
/* for external functions a few registers must be accessible from the outside */
|
||||||
|
cell cip PACKED; /* instruction pointer: relative to base + amxhdr->cod */
|
||||||
|
cell frm PACKED; /* stack frame base: relative to base + amxhdr->dat */
|
||||||
|
cell hea PACKED; /* top of the heap: relative to base + amxhdr->dat */
|
||||||
|
cell hlw PACKED; /* bottom of the heap: relative to base + amxhdr->dat */
|
||||||
|
cell stk PACKED; /* stack pointer: relative to base + amxhdr->dat */
|
||||||
|
cell stp PACKED; /* top of the stack: relative to base + amxhdr->dat */
|
||||||
|
int flags PACKED; /* current status, see amx_Flags() */
|
||||||
|
/* user data */
|
||||||
|
long usertags[AMX_USERNUM] PACKED;
|
||||||
|
void _FAR *userdata[AMX_USERNUM] PACKED;
|
||||||
|
/* native functions can raise an error */
|
||||||
|
int error PACKED;
|
||||||
|
/* passing parameters requires a "count" field */
|
||||||
|
int paramcount;
|
||||||
|
/* the sleep opcode needs to store the full AMX status */
|
||||||
|
cell pri PACKED;
|
||||||
|
cell alt PACKED;
|
||||||
|
cell reset_stk PACKED;
|
||||||
|
cell reset_hea PACKED;
|
||||||
|
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
|
||||||
|
#if defined JIT
|
||||||
|
/* support variables for the JIT */
|
||||||
|
int reloc_size PACKED; /* required temporary buffer for relocations */
|
||||||
|
long code_size PACKED; /* estimated memory footprint of the native code */
|
||||||
|
#endif
|
||||||
|
} PACKED AMX;
|
||||||
|
|
||||||
|
/* The AMX_HEADER structure is both the memory format as the file format. The
|
||||||
|
* structure is used internaly.
|
||||||
|
*/
|
||||||
|
typedef struct tagAMX_HEADER {
|
||||||
|
int32_t size PACKED; /* size of the "file" */
|
||||||
|
uint16_t magic PACKED; /* signature */
|
||||||
|
char file_version PACKED; /* file format version */
|
||||||
|
char amx_version PACKED; /* required version of the AMX */
|
||||||
|
int16_t flags PACKED;
|
||||||
|
int16_t defsize PACKED; /* size of a definition record */
|
||||||
|
int32_t cod PACKED; /* initial value of COD - code block */
|
||||||
|
int32_t dat PACKED; /* initial value of DAT - data block */
|
||||||
|
int32_t hea PACKED; /* initial value of HEA - start of the heap */
|
||||||
|
int32_t stp PACKED; /* initial value of STP - stack top */
|
||||||
|
int32_t cip PACKED; /* initial value of CIP - the instruction pointer */
|
||||||
|
int32_t publics PACKED; /* offset to the "public functions" table */
|
||||||
|
int32_t natives PACKED; /* offset to the "native functions" table */
|
||||||
|
int32_t libraries PACKED; /* offset to the table of libraries */
|
||||||
|
int32_t pubvars PACKED; /* the "public variables" table */
|
||||||
|
int32_t tags PACKED; /* the "public tagnames" table */
|
||||||
|
int32_t nametable PACKED; /* name table */
|
||||||
|
} PACKED AMX_HEADER;
|
||||||
|
|
||||||
|
#if PAWN_CELL_SIZE==16
|
||||||
|
#define AMX_MAGIC 0xf1e2
|
||||||
|
#elif PAWN_CELL_SIZE==32
|
||||||
|
#define AMX_MAGIC 0xf1e0
|
||||||
|
#elif PAWN_CELL_SIZE==64
|
||||||
|
#define AMX_MAGIC 0xf1e1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum {
|
||||||
|
AMX_ERR_NONE,
|
||||||
|
/* reserve the first 15 error codes for exit codes of the abstract machine */
|
||||||
|
AMX_ERR_EXIT, /* forced exit */
|
||||||
|
AMX_ERR_ASSERT, /* assertion failed */
|
||||||
|
AMX_ERR_STACKERR, /* stack/heap collision */
|
||||||
|
AMX_ERR_BOUNDS, /* index out of bounds */
|
||||||
|
AMX_ERR_MEMACCESS, /* invalid memory access */
|
||||||
|
AMX_ERR_INVINSTR, /* invalid instruction */
|
||||||
|
AMX_ERR_STACKLOW, /* stack underflow */
|
||||||
|
AMX_ERR_HEAPLOW, /* heap underflow */
|
||||||
|
AMX_ERR_CALLBACK, /* no callback, or invalid callback */
|
||||||
|
AMX_ERR_NATIVE, /* native function failed */
|
||||||
|
AMX_ERR_DIVIDE, /* divide by zero */
|
||||||
|
AMX_ERR_SLEEP, /* go into sleepmode - code can be restarted */
|
||||||
|
AMX_ERR_INVSTATE, /* invalid state for this access */
|
||||||
|
|
||||||
|
AMX_ERR_MEMORY = 16, /* out of memory */
|
||||||
|
AMX_ERR_FORMAT, /* invalid file format */
|
||||||
|
AMX_ERR_VERSION, /* file is for a newer version of the AMX */
|
||||||
|
AMX_ERR_NOTFOUND, /* function not found */
|
||||||
|
AMX_ERR_INDEX, /* invalid index parameter (bad entry point) */
|
||||||
|
AMX_ERR_DEBUG, /* debugger cannot run */
|
||||||
|
AMX_ERR_INIT, /* AMX not initialized (or doubly initialized) */
|
||||||
|
AMX_ERR_USERDATA, /* unable to set user data field (table full) */
|
||||||
|
AMX_ERR_INIT_JIT, /* cannot initialize the JIT */
|
||||||
|
AMX_ERR_PARAMS, /* parameter error */
|
||||||
|
AMX_ERR_DOMAIN, /* domain error, expression result does not fit in range */
|
||||||
|
AMX_ERR_GENERAL, /* general error (unknown or unspecific error) */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* AMX_FLAG_CHAR16 0x01 no longer used */
|
||||||
|
#define AMX_FLAG_DEBUG 0x02 /* symbolic info. available */
|
||||||
|
#define AMX_FLAG_COMPACT 0x04 /* compact encoding */
|
||||||
|
#define AMX_FLAG_BYTEOPC 0x08 /* opcode is a byte (not a cell) */
|
||||||
|
#define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking; no STMT opcode */
|
||||||
|
#define AMX_FLAG_NTVREG 0x1000 /* all native functions are registered */
|
||||||
|
#define AMX_FLAG_JITC 0x2000 /* abstract machine is JIT compiled */
|
||||||
|
#define AMX_FLAG_BROWSE 0x4000 /* busy browsing */
|
||||||
|
#define AMX_FLAG_RELOC 0x8000 /* jump/call addresses relocated */
|
||||||
|
|
||||||
|
#define AMX_EXEC_MAIN -1 /* start at program entry point */
|
||||||
|
#define AMX_EXEC_CONT -2 /* continue from last address */
|
||||||
|
|
||||||
|
#define AMX_USERTAG(a,b,c,d) ((a) | ((b)<<8) | ((long)(c)<<16) | ((long)(d)<<24))
|
||||||
|
|
||||||
|
#if !defined AMX_COMPACTMARGIN
|
||||||
|
#define AMX_COMPACTMARGIN 64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* for native functions that use floating point parameters, the following
|
||||||
|
* two macros are convenient for casting a "cell" into a "float" type _without_
|
||||||
|
* changing the bit pattern
|
||||||
|
*/
|
||||||
|
#if PAWN_CELL_SIZE==32
|
||||||
|
#define amx_ftoc(f) ( * ((cell*)&f) ) /* float to cell */
|
||||||
|
#define amx_ctof(c) ( * ((float*)&c) ) /* cell to float */
|
||||||
|
#elif PAWN_CELL_SIZE==64
|
||||||
|
#define amx_ftoc(f) ( * ((cell*)&f) ) /* float to cell */
|
||||||
|
#define amx_ctof(c) ( * ((double*)&c) ) /* cell to float */
|
||||||
|
#else
|
||||||
|
#error Unsupported cell size
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define amx_StrParam(amx,param,result) \
|
||||||
|
do { \
|
||||||
|
cell *amx_cstr_; int amx_length_; \
|
||||||
|
amx_GetAddr((amx), (param), &amx_cstr_); \
|
||||||
|
amx_StrLen(amx_cstr_, &amx_length_); \
|
||||||
|
if (amx_length_ > 0 && \
|
||||||
|
((result) = (void*)alloca((amx_length_ + 1) * sizeof(*(result)))) != NULL) \
|
||||||
|
amx_GetString((char*)(result), amx_cstr_, sizeof(*(result))>1, amx_length_); \
|
||||||
|
else (result) = NULL; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
uint16_t * AMXAPI amx_Align16(uint16_t *v);
|
||||||
|
uint32_t * AMXAPI amx_Align32(uint32_t *v);
|
||||||
|
#if defined _I64_MAX || defined HAVE_I64
|
||||||
|
uint64_t * AMXAPI amx_Align64(uint64_t *v);
|
||||||
|
#endif
|
||||||
|
int AMXAPI amx_Allot(AMX *amx, int cells, cell *amx_addr, cell **phys_addr);
|
||||||
|
int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params);
|
||||||
|
int AMXAPI amx_Cleanup(AMX *amx);
|
||||||
|
int AMXAPI amx_Clone(AMX *amxClone, AMX *amxSource, void *data);
|
||||||
|
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index);
|
||||||
|
int AMXAPI amx_FindNative(AMX *amx, const char *name, int *index);
|
||||||
|
int AMXAPI amx_FindPublic(AMX *amx, const char *funcname, int *index);
|
||||||
|
int AMXAPI amx_FindPubVar(AMX *amx, const char *varname, cell *amx_addr);
|
||||||
|
int AMXAPI amx_FindTagId(AMX *amx, cell tag_id, char *tagname);
|
||||||
|
int AMXAPI amx_Flags(AMX *amx,uint16_t *flags);
|
||||||
|
int AMXAPI amx_GetAddr(AMX *amx,cell amx_addr,cell **phys_addr);
|
||||||
|
int AMXAPI amx_GetNative(AMX *amx, int index, char *funcname);
|
||||||
|
int AMXAPI amx_GetPublic(AMX *amx, int index, char *funcname);
|
||||||
|
int AMXAPI amx_GetPubVar(AMX *amx, int index, char *varname, cell *amx_addr);
|
||||||
|
int AMXAPI amx_GetString(char *dest,const cell *source, int use_wchar, size_t size);
|
||||||
|
int AMXAPI amx_GetTag(AMX *amx, int index, char *tagname, cell *tag_id);
|
||||||
|
int AMXAPI amx_GetUserData(AMX *amx, long tag, void **ptr);
|
||||||
|
int AMXAPI amx_Init(AMX *amx, void *program);
|
||||||
|
int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code);
|
||||||
|
int AMXAPI amx_MemInfo(AMX *amx, long *codesize, long *datasize, long *stackheap);
|
||||||
|
int AMXAPI amx_NameLength(AMX *amx, int *length);
|
||||||
|
AMX_NATIVE_INFO * AMXAPI amx_NativeInfo(const char *name, AMX_NATIVE func);
|
||||||
|
int AMXAPI amx_NumNatives(AMX *amx, int *number);
|
||||||
|
int AMXAPI amx_NumPublics(AMX *amx, int *number);
|
||||||
|
int AMXAPI amx_NumPubVars(AMX *amx, int *number);
|
||||||
|
int AMXAPI amx_NumTags(AMX *amx, int *number);
|
||||||
|
int AMXAPI amx_Push(AMX *amx, cell value);
|
||||||
|
int AMXAPI amx_PushArray(AMX *amx, cell *amx_addr, cell **phys_addr, const cell array[], int numcells);
|
||||||
|
int AMXAPI amx_PushString(AMX *amx, cell *amx_addr, cell **phys_addr, const char *string, int pack, int use_wchar);
|
||||||
|
int AMXAPI amx_RaiseError(AMX *amx, int error);
|
||||||
|
int AMXAPI amx_Register(AMX *amx, const AMX_NATIVE_INFO *nativelist, int number);
|
||||||
|
int AMXAPI amx_Release(AMX *amx, cell amx_addr);
|
||||||
|
int AMXAPI amx_SetCallback(AMX *amx, AMX_CALLBACK callback);
|
||||||
|
int AMXAPI amx_SetDebugHook(AMX *amx, AMX_DEBUG debug);
|
||||||
|
int AMXAPI amx_SetString(cell *dest, const char *source, int pack, int use_wchar, size_t size);
|
||||||
|
int AMXAPI amx_SetUserData(AMX *amx, long tag, void *ptr);
|
||||||
|
int AMXAPI amx_StrLen(const cell *cstring, int *length);
|
||||||
|
int AMXAPI amx_UTF8Check(const char *string, int *length);
|
||||||
|
int AMXAPI amx_UTF8Get(const char *string, const char **endptr, cell *value);
|
||||||
|
int AMXAPI amx_UTF8Len(const cell *cstr, int *length);
|
||||||
|
int AMXAPI amx_UTF8Put(char *string, char **endptr, int maxchars, cell value);
|
||||||
|
|
||||||
|
#if PAWN_CELL_SIZE==16
|
||||||
|
#define amx_AlignCell(v) amx_Align16(v)
|
||||||
|
#elif PAWN_CELL_SIZE==32
|
||||||
|
#define amx_AlignCell(v) amx_Align32(v)
|
||||||
|
#elif PAWN_CELL_SIZE==64 && (defined _I64_MAX || defined HAVE_I64)
|
||||||
|
#define amx_AlignCell(v) amx_Align64(v)
|
||||||
|
#else
|
||||||
|
#error Unsupported cell size
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define amx_RegisterFunc(amx, name, func) \
|
||||||
|
amx_Register((amx), amx_NativeInfo((name),(func)), 1);
|
||||||
|
|
||||||
|
#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 /* AMX_H_INCLUDED */
|
326
compiler/amxxpc/amxxpc.cpp
Executable file
326
compiler/amxxpc/amxxpc.cpp
Executable file
|
@ -0,0 +1,326 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <unistd.h>
|
||||||
|
#else
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <io.h>
|
||||||
|
#endif
|
||||||
|
#include "zlib.h"
|
||||||
|
#include "amx.h"
|
||||||
|
#include "amxxpc.h"
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct abl pl32;
|
||||||
|
struct abl pl64;
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
printf("debug clamp\n");
|
||||||
|
getchar();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
HINSTANCE lib = dlmount("./amxxpc32.so");
|
||||||
|
#else
|
||||||
|
HINSTANCE lib = dlmount("amxxpc32.dll");
|
||||||
|
#endif
|
||||||
|
if (!lib)
|
||||||
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
printf("32bit compiler failed to instantiate: %s\n", dlerror());
|
||||||
|
#else
|
||||||
|
printf("32bit compiler failed to instantiate: %d\n", GetLastError());
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPILER sc32 = (COMPILER)dlsym(lib, "Compile32");
|
||||||
|
|
||||||
|
if (!sc32)
|
||||||
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
printf("32bit compiler failed to link: %p|%p.\n",sc32, sc_printf);
|
||||||
|
#else
|
||||||
|
printf("32bit compiler failed to link: %d.\n", GetLastError());
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
AMX_HEADER hdr;
|
||||||
|
|
||||||
|
printf("Welcome to the AMX Mod X %s Compiler.\n", VERSION_STRING);
|
||||||
|
printf("Copyright (c) 1997-2005 ITB CompuPhase, AMX Mod X Team\n\n");
|
||||||
|
|
||||||
|
if (argc < 2)
|
||||||
|
{
|
||||||
|
printf("Usage: <file.sma> [options]\n");
|
||||||
|
printf("Use -? or --help to see full options\n\n");
|
||||||
|
getchar();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(argv[1], "-?") || !strcmp(argv[1], "--help"))
|
||||||
|
{
|
||||||
|
show_help();
|
||||||
|
printf("Press any key to continue.\n");
|
||||||
|
getchar();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc32(argc, argv);
|
||||||
|
|
||||||
|
char *file = FindFileName(argc, argv);
|
||||||
|
|
||||||
|
if (file == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not locate the output file.\n");
|
||||||
|
exit(0);
|
||||||
|
} else if (strstr(file, ".asm")) {
|
||||||
|
printf("Assembler output succeeded.\n");
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
FILE *fp = fopen(file, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not locate output file %s (compile failed).\n", file);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
fread(&hdr, sizeof(hdr), 1, fp);
|
||||||
|
amx_Align32((uint32_t *)&hdr.stp);
|
||||||
|
amx_Align32((uint32_t *)&hdr.size);
|
||||||
|
pl32.stp = hdr.stp;
|
||||||
|
pl32.cellsize = 4;
|
||||||
|
int size = sizeof(hdr) + hdr.size;
|
||||||
|
pl32.size = size;
|
||||||
|
pl32.data = new char[size];
|
||||||
|
rewind(fp);
|
||||||
|
fread(pl32.data, 1, size, fp);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink(file);
|
||||||
|
|
||||||
|
HINSTANCE lib64 = 0;
|
||||||
|
#ifdef __linux__
|
||||||
|
lib64 = dlmount("./amxxpc64.so");
|
||||||
|
#else
|
||||||
|
lib64 = dlmount("amxxpc64.dll");
|
||||||
|
#endif
|
||||||
|
if (!lib64)
|
||||||
|
{
|
||||||
|
printf("64bit compiler failed to instantiate.\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPILER sc64 = (COMPILER)dlsym(lib64, "Compile64");
|
||||||
|
|
||||||
|
if (!sc64)
|
||||||
|
{
|
||||||
|
#ifdef __linux__
|
||||||
|
sc_printf("64bit compiler failed to link: %s.\n", dlerror());
|
||||||
|
#else
|
||||||
|
printf("64bit compiler failed to link: %d.\n", GetLastError());
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc64(argc, argv);
|
||||||
|
|
||||||
|
dlclose(lib64);
|
||||||
|
|
||||||
|
if (file == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not locate the output file on second pass.\n");
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
FILE *fp = fopen(file, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not locate output file on second pass (compile failed).\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
fread(&hdr, sizeof(hdr), 1, fp);
|
||||||
|
amx_Align32((uint32_t *)&hdr.stp);
|
||||||
|
amx_Align32((uint32_t *)&hdr.size);
|
||||||
|
pl64.stp = hdr.stp;
|
||||||
|
pl64.cellsize = 8;
|
||||||
|
int size = sizeof(hdr) + hdr.size;
|
||||||
|
pl64.size = sizeof(hdr) + hdr.size;
|
||||||
|
pl64.data = new char[size];
|
||||||
|
rewind(fp);
|
||||||
|
fread(pl64.data, 1, size, fp);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
// COMPRSSION
|
||||||
|
/////////////
|
||||||
|
|
||||||
|
int err;
|
||||||
|
|
||||||
|
pl32.cmpsize = compressBound(pl32.size);
|
||||||
|
pl32.cmp = new char[pl32.cmpsize];
|
||||||
|
err = compress((Bytef *)pl32.cmp, (uLongf *)&(pl32.cmpsize), (const Bytef*)pl32.data, pl32.size);
|
||||||
|
|
||||||
|
if (err != Z_OK)
|
||||||
|
{
|
||||||
|
printf("internal error - compression failed on first pass: %d\n", err);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
pl64.cmpsize = compressBound(pl64.size);
|
||||||
|
pl64.cmp = new char[pl64.cmpsize];
|
||||||
|
err = compress((Bytef *)pl64.cmp, (uLongf *)&(pl64.cmpsize), (const Bytef*)pl64.data, pl64.size);
|
||||||
|
|
||||||
|
if (err != Z_OK)
|
||||||
|
{
|
||||||
|
printf("internal error - compression failed on second pass: %d\n", err);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *newfile = new char[strlen(file)+3];
|
||||||
|
strcpy(newfile, file);
|
||||||
|
if (!strstr(file, ".amxx") && !strstr(file, ".AMXX"))
|
||||||
|
strcat(newfile, "x");
|
||||||
|
|
||||||
|
FILE *fp = fopen(newfile, "wb");
|
||||||
|
if (!fp)
|
||||||
|
{
|
||||||
|
printf("Error trying to write file %s.\n", newfile);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//magic + archn
|
||||||
|
int hdrsize = sizeof(long) + sizeof(char);
|
||||||
|
int entry = sizeof(long) + sizeof(long) + sizeof(char);
|
||||||
|
int offset1 = hdrsize + (entry * 2);
|
||||||
|
int offset2 = offset1 + pl32.cmpsize;
|
||||||
|
|
||||||
|
int magic = MAGIC_HEADER;
|
||||||
|
fwrite((void *)&magic, sizeof(int), 1, fp);
|
||||||
|
char n = 2;
|
||||||
|
fwrite((void *)&n, sizeof(char), 1, fp);
|
||||||
|
|
||||||
|
fwrite((void *)&(pl32.cellsize), sizeof(char), 1, fp);
|
||||||
|
fwrite((void *)&(pl32.stp), sizeof(long), 1, fp);
|
||||||
|
fwrite((void *)&(offset1), sizeof(long), 1, fp);
|
||||||
|
fwrite((void *)&(pl64.cellsize), sizeof(char), 1, fp);
|
||||||
|
fwrite((void *)&(pl64.stp), sizeof(long), 1, fp);
|
||||||
|
fwrite((void *)&(offset2), sizeof(long), 1, fp);
|
||||||
|
fwrite(pl32.cmp, sizeof(char), pl32.cmpsize, fp);
|
||||||
|
fwrite(pl64.cmp, sizeof(char), pl64.cmpsize, fp);
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
unlink(file);
|
||||||
|
|
||||||
|
printf("Done.\n");
|
||||||
|
|
||||||
|
dlclose(lib);
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//we get the full name of the file here
|
||||||
|
//our job is to a] switch the .sma extension to .amx
|
||||||
|
// and to b] strip everything but the trailing name
|
||||||
|
char *swiext(const char *file, const char *ext, int isO)
|
||||||
|
{
|
||||||
|
int i = 0, pos = -1, j = 0;
|
||||||
|
int fileLen = strlen(file);
|
||||||
|
int extLen = strlen(ext);
|
||||||
|
int max = 0, odirFlag = -1;
|
||||||
|
|
||||||
|
for (i=fileLen-1; i>=0; i--)
|
||||||
|
{
|
||||||
|
if (file[i] == '.' && pos == -1)
|
||||||
|
{
|
||||||
|
pos = i+1;
|
||||||
|
}
|
||||||
|
if ((file[i] == '/' || file[i] == '\\') && !isO)
|
||||||
|
{
|
||||||
|
odirFlag = i+1;
|
||||||
|
//realign pos - we've just stripped fileLen-i chars
|
||||||
|
pos -= i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *newbuffer = new char[fileLen+strlen(ext)+2];
|
||||||
|
fileLen += strlen(ext);
|
||||||
|
if (odirFlag == -1)
|
||||||
|
{
|
||||||
|
strcpy(newbuffer, file);
|
||||||
|
} else {
|
||||||
|
strcpy(newbuffer, &(file[odirFlag]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pos > -1)
|
||||||
|
{
|
||||||
|
for (i=pos; i<fileLen; i++)
|
||||||
|
{
|
||||||
|
if (j < extLen)
|
||||||
|
newbuffer[i] = ext[j++];
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
newbuffer[i] = '\0';
|
||||||
|
} else {
|
||||||
|
strcat(newbuffer, ".");
|
||||||
|
strcat(newbuffer, ext);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newbuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *FindFileName(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int save = -1;
|
||||||
|
for (i=1; i<argc; i++)
|
||||||
|
{
|
||||||
|
if (argv[i][0] == '-' && argv[i][1] == 'o')
|
||||||
|
{
|
||||||
|
if (argv[i][2] == ' ' || argv[i][2] == '\0')
|
||||||
|
{
|
||||||
|
if (i == argc-1)
|
||||||
|
return NULL;
|
||||||
|
return swiext(&argv[i+1][2], "amx", 1);
|
||||||
|
} else {
|
||||||
|
return swiext(&(argv[i][2]), "amx", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (argv[i][0] != '-')
|
||||||
|
{
|
||||||
|
save = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (save>0)
|
||||||
|
{
|
||||||
|
return swiext(argv[save], "amx", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void show_help()
|
||||||
|
{
|
||||||
|
printf("Options:\n");
|
||||||
|
printf("\t-A<num> alignment in bytes of the data segment and the stack\n");
|
||||||
|
printf("\t-a output assembler code\n");
|
||||||
|
printf("\t-C[+/-] compact encoding for output file (default=-)\n");
|
||||||
|
printf("\t-c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
|
||||||
|
printf("\t-Dpath active directory path\n");
|
||||||
|
printf("\t-d0 no symbolic information, no run-time checks\n");
|
||||||
|
printf("\t-d1 [default] run-time checks, no symbolic information\n");
|
||||||
|
printf("\t-d2 full debug information and dynamic checking\n");
|
||||||
|
printf("\t-d3 full debug information, dynamic checking, no optimization\n");
|
||||||
|
printf("\t-e<name> set name of error file (quiet compile)\n");
|
||||||
|
printf("\t-H<hwnd> window handle to send a notification message on finish\n");
|
||||||
|
printf("\t-i<name> path for include files\n");
|
||||||
|
printf("\t-l create list file (preprocess only)\n");
|
||||||
|
printf("\t-o<name> set base name of output file\n");
|
||||||
|
printf("\t-p<name> set name of \"prefix\" file\n");
|
||||||
|
printf("\t-r[name] write cross reference report to console or to specified file\n");
|
||||||
|
}
|
51
compiler/amxxpc/amxxpc.h
Executable file
51
compiler/amxxpc/amxxpc.h
Executable file
|
@ -0,0 +1,51 @@
|
||||||
|
#ifndef _AMXXSC_INCLUDE_H
|
||||||
|
#define _AMXXSC_INCLUDE_H
|
||||||
|
|
||||||
|
#define VERSION_STRING "1.50-300"
|
||||||
|
#define VERSION 03000
|
||||||
|
#define MAGIC_HEADER 0x414D5842
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
# include <dlfcn.h>
|
||||||
|
#else
|
||||||
|
# include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
# define dlmount(x) dlopen(x, RTLD_NOW)
|
||||||
|
typedef void* HINSTANCE;
|
||||||
|
#else
|
||||||
|
# define dlsym(x, s) GetProcAddress(x, s)
|
||||||
|
# define dlmount(x) LoadLibrary(x)
|
||||||
|
# define dlclose(x) FreeLibrary(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "zlib.h"
|
||||||
|
|
||||||
|
typedef int (*COMPILER)(int argc, char **argv);
|
||||||
|
typedef int (*PRINTF)(const char *message, ...);
|
||||||
|
|
||||||
|
char *FindFileName(int argc, char **argv);
|
||||||
|
char *swiext(const char *file, const char *ext);
|
||||||
|
void show_help();
|
||||||
|
|
||||||
|
|
||||||
|
struct ablhdr
|
||||||
|
{
|
||||||
|
int magic;
|
||||||
|
char size;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct abl
|
||||||
|
{
|
||||||
|
long stp;
|
||||||
|
char cellsize;
|
||||||
|
int size;
|
||||||
|
long cmpsize;
|
||||||
|
char *data;
|
||||||
|
char *cmp;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_AMXXSC_INCLUDE_H
|
21
compiler/amxxpc/amxxpc.sln
Executable file
21
compiler/amxxpc/amxxpc.sln
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "amxxpc", "amxxpc.vcproj", "{39412290-D01C-472F-A439-AB5592A04C08}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
Debug = Debug
|
||||||
|
Release = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{39412290-D01C-472F-A439-AB5592A04C08}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{39412290-D01C-472F-A439-AB5592A04C08}.Debug.Build.0 = Debug|Win32
|
||||||
|
{39412290-D01C-472F-A439-AB5592A04C08}.Release.ActiveCfg = Release|Win32
|
||||||
|
{39412290-D01C-472F-A439-AB5592A04C08}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
164
compiler/amxxpc/amxxpc.vcproj
Executable file
164
compiler/amxxpc/amxxpc.vcproj
Executable file
|
@ -0,0 +1,164 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="amxxpc"
|
||||||
|
ProjectGUID="{39412290-D01C-472F-A439-AB5592A04C08}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="Debug"
|
||||||
|
IntermediateDirectory="Debug"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="5"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="zlib.lib"
|
||||||
|
OutputFile="$(OutDir)/amxxpc.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/amxxpc.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="Release"
|
||||||
|
IntermediateDirectory="Release"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="4"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="FALSE"
|
||||||
|
DebugInformationFormat="3"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="zlib.lib"
|
||||||
|
OutputFile="$(OutDir)/amxxpc.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||||
|
<File
|
||||||
|
RelativePath=".\amx.cpp">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\amxxpc.cpp">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Header Files"
|
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
<File
|
||||||
|
RelativePath=".\amx.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\amxxpc.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\osdefs.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\resource.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\resource1.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\sclinux.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\zconf.h">
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\zlib.h">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="Resource Files"
|
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||||
|
<File
|
||||||
|
RelativePath=".\amxxpc1.rc">
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
72
compiler/amxxpc/amxxpc1.rc
Executable file
72
compiler/amxxpc/amxxpc1.rc
Executable file
|
@ -0,0 +1,72 @@
|
||||||
|
// Microsoft Visual C++ generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource1.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
#include "afxres.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// English (U.S.) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource1.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"#include ""afxres.h""\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Icon
|
||||||
|
//
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
1 ICON "favicon.ico"
|
||||||
|
#endif // English (U.S.) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
BIN
compiler/amxxpc/favicon.ico
Executable file
BIN
compiler/amxxpc/favicon.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 766 B |
60
compiler/amxxpc/osdefs.h
Executable file
60
compiler/amxxpc/osdefs.h
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
/* __MSDOS__ set when compiling for DOS (not Windows)
|
||||||
|
* _Windows set when compiling for any version of Microsoft Windows
|
||||||
|
* __WIN32__ set when compiling for Windows95 or WindowsNT (32 bit mode)
|
||||||
|
* __32BIT__ set when compiling in 32-bit "flat" mode (DOS or Windows)
|
||||||
|
*
|
||||||
|
* Copyright 1998-2002, ITB CompuPhase, The Netherlands.
|
||||||
|
* info@compuphase.com.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _OSDEFS_H
|
||||||
|
#define _OSDEFS_H
|
||||||
|
|
||||||
|
/* Every compiler uses different "default" macros to indicate the mode
|
||||||
|
* it is in. Throughout the source, we use the Borland C++ macros, so
|
||||||
|
* the macros of Watcom C/C++ and Microsoft Visual C/C++ are mapped to
|
||||||
|
* those of Borland C++.
|
||||||
|
*/
|
||||||
|
#if defined(__WATCOMC__)
|
||||||
|
# if defined(__WINDOWS__) || defined(__NT__)
|
||||||
|
# define _Windows 1
|
||||||
|
# endif
|
||||||
|
# ifdef __386__
|
||||||
|
# define __32BIT__ 1
|
||||||
|
# endif
|
||||||
|
# if defined(_Windows) && defined(__32BIT__)
|
||||||
|
# define __WIN32__ 1
|
||||||
|
# endif
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# if defined(_WINDOWS) || defined(_WIN32)
|
||||||
|
# define _Windows 1
|
||||||
|
# endif
|
||||||
|
# ifdef _WIN32
|
||||||
|
# define __WIN32__ 1
|
||||||
|
# define __32BIT__ 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __linux__
|
||||||
|
#include <endian.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Linux NOW has these */
|
||||||
|
#if !defined BIG_ENDIAN
|
||||||
|
#define BIG_ENDIAN 4321
|
||||||
|
#endif
|
||||||
|
#if !defined LITTLE_ENDIAN
|
||||||
|
#define LITTLE_ENDIAN 1234
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* educated guess, BYTE_ORDER is undefined, i386 is common => little endian */
|
||||||
|
#if !defined BYTE_ORDER
|
||||||
|
#if defined UCLINUX
|
||||||
|
#define BYTE_ORDER BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define BYTE_ORDER LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _OSDEFS_H */
|
||||||
|
|
17
compiler/amxxpc/resource.h
Executable file
17
compiler/amxxpc/resource.h
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by amxxsc.rc
|
||||||
|
//
|
||||||
|
#define ICON 5
|
||||||
|
#define IDI_ICON1 104
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 105
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
16
compiler/amxxpc/resource1.h
Executable file
16
compiler/amxxpc/resource1.h
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by amxxsc1.rc
|
||||||
|
//
|
||||||
|
#define IDI_ICON1 101
|
||||||
|
|
||||||
|
// Next default values for new objects
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
47
compiler/amxxpc/sclinux.h
Executable file
47
compiler/amxxpc/sclinux.h
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Things needed to compile under linux.
|
||||||
|
*
|
||||||
|
* Should be reworked totally to use GNU's 'configure'
|
||||||
|
*/
|
||||||
|
#ifndef SCLINUX_H
|
||||||
|
#define SCLINUX_H
|
||||||
|
|
||||||
|
/* getchar() is not a 'cool' replacement for MSDOS getch: Linux/unix depends on the features activated or not about the
|
||||||
|
* controlling terminal's tty. This means that ioctl(2) calls must be performed, for instance to have the controlling
|
||||||
|
* terminal tty's in 'raw' mode, if we want to be able to fetch a single character. This also means that everything must
|
||||||
|
* be put back correctly when the function ends. See GETCH.C for an implementation.
|
||||||
|
*
|
||||||
|
* For interactive use of SRUN/SDBG if would be much better to use GNU's readline package: the user would be able to
|
||||||
|
* have a complete emacs/vi like line editing system.
|
||||||
|
*/
|
||||||
|
#include "getch.h"
|
||||||
|
|
||||||
|
#define stricmp(a,b) strcasecmp(a,b)
|
||||||
|
#define strnicmp(a,b,c) strncasecmp(a,b,c)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WinWorld wants '\'. Unices do not.
|
||||||
|
*/
|
||||||
|
#define DIRECTORY_SEP_CHAR '/'
|
||||||
|
#define DIRECTORY_SEP_STR "/"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SC assumes that a computer is Little Endian unless told otherwise. It uses
|
||||||
|
* (and defines) the macros BYTE_ORDER and BIG_ENDIAN.
|
||||||
|
* For Linux, we must overrule these settings with those defined in glibc.
|
||||||
|
*/
|
||||||
|
#if !defined __BYTE_ORDER
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __OpenBSD__ || defined __FreeBSD__
|
||||||
|
# define __BYTE_ORDER BYTE_ORDER
|
||||||
|
# define __LITTLE_ENDIAN LITTLE_ENDIAN
|
||||||
|
# define __BIG_ENDIAN BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined __BYTE_ORDER
|
||||||
|
# error "Can't figure computer byte order (__BYTE_ORDER macro not found)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SCLINUX_H */
|
155
compiler/amxxpc/testmini.c
Executable file
155
compiler/amxxpc/testmini.c
Executable file
|
@ -0,0 +1,155 @@
|
||||||
|
/* testmini.c -- very simple test program for the miniLZO library
|
||||||
|
|
||||||
|
This file is part of the LZO real-time data compression library.
|
||||||
|
|
||||||
|
Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer
|
||||||
|
|
||||||
|
The LZO library 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 (at your option) any later version.
|
||||||
|
|
||||||
|
The LZO 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with the LZO library; see the file COPYING.
|
||||||
|
If not, write to the Free Software Foundation, Inc.,
|
||||||
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
Markus F.X.J. Oberhumer
|
||||||
|
<markus@oberhumer.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
// This program shows the basic usage of the LZO library.
|
||||||
|
// We will compress a block of data and decompress again.
|
||||||
|
//
|
||||||
|
// For more information, documentation, example programs and other support
|
||||||
|
// files (like Makefiles and build scripts) please download the full LZO
|
||||||
|
// package from
|
||||||
|
// http://www.oberhumer.com/opensource/lzo/
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
/* First let's include "minizo.h". */
|
||||||
|
|
||||||
|
#include "minilzo.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* We want to compress the data block at `in' with length `IN_LEN' to
|
||||||
|
* the block at `out'. Because the input block may be incompressible,
|
||||||
|
* we must provide a little more output space in case that compression
|
||||||
|
* is not possible.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__LZO_STRICT_16BIT)
|
||||||
|
#define IN_LEN (8*1024)
|
||||||
|
#else
|
||||||
|
#define IN_LEN (128*1024L)
|
||||||
|
#endif
|
||||||
|
#define OUT_LEN (IN_LEN + IN_LEN / 64 + 16 + 3)
|
||||||
|
|
||||||
|
static lzo_byte in [ IN_LEN ];
|
||||||
|
static lzo_byte out [ OUT_LEN ];
|
||||||
|
|
||||||
|
|
||||||
|
/* Work-memory needed for compression. Allocate memory in units
|
||||||
|
* of `lzo_align_t' (instead of `char') to make sure it is properly aligned.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HEAP_ALLOC(var,size) \
|
||||||
|
lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]
|
||||||
|
|
||||||
|
static HEAP_ALLOC(wrkmem,LZO1X_1_MEM_COMPRESS);
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
//
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
lzo_uint in_len;
|
||||||
|
lzo_uint out_len;
|
||||||
|
lzo_uint new_len;
|
||||||
|
|
||||||
|
#if defined(__EMX__)
|
||||||
|
_response(&argc,&argv);
|
||||||
|
_wildcard(&argc,&argv);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (argc < 0 && argv == NULL) /* avoid warning about unused args */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
printf("\nLZO real-time data compression library (v%s, %s).\n",
|
||||||
|
lzo_version_string(), lzo_version_date());
|
||||||
|
printf("Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 1: initialize the LZO library
|
||||||
|
*/
|
||||||
|
if (lzo_init() != LZO_E_OK)
|
||||||
|
{
|
||||||
|
printf("lzo_init() failed !!!\n");
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 2: prepare the input block that will get compressed.
|
||||||
|
* We just fill it with zeros in this example program,
|
||||||
|
* but you would use your real-world data here.
|
||||||
|
*/
|
||||||
|
in_len = IN_LEN;
|
||||||
|
lzo_memset(in,0,in_len);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 3: compress from `in' to `out' with LZO1X-1
|
||||||
|
*/
|
||||||
|
r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
|
||||||
|
if (r == LZO_E_OK)
|
||||||
|
printf("compressed %lu bytes into %lu bytes\n",
|
||||||
|
(long) in_len, (long) out_len);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* this should NEVER happen */
|
||||||
|
printf("internal error - compression failed: %d\n", r);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
/* check for an incompressible block */
|
||||||
|
if (out_len >= in_len)
|
||||||
|
{
|
||||||
|
printf("This block contains incompressible data.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 4: decompress again, now going from `out' to `in'
|
||||||
|
*/
|
||||||
|
r = lzo1x_decompress(out,out_len,in,&new_len,NULL);
|
||||||
|
if (r == LZO_E_OK && new_len == in_len)
|
||||||
|
printf("decompressed %lu bytes back into %lu bytes\n",
|
||||||
|
(long) out_len, (long) in_len);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* this should NEVER happen */
|
||||||
|
printf("internal error - decompression failed: %d\n", r);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nminiLZO simple compression test passed.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
vi:ts=4
|
||||||
|
*/
|
||||||
|
|
323
compiler/amxxpc/zconf.h
Executable file
323
compiler/amxxpc/zconf.h
Executable file
|
@ -0,0 +1,323 @@
|
||||||
|
/* zconf.h -- configuration of the zlib compression library
|
||||||
|
* Copyright (C) 1995-2003 Jean-loup Gailly.
|
||||||
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* @(#) $Id$ */
|
||||||
|
|
||||||
|
#ifndef ZCONF_H
|
||||||
|
#define ZCONF_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If you *really* need a unique prefix for all types and library functions,
|
||||||
|
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
|
||||||
|
*/
|
||||||
|
#ifdef Z_PREFIX
|
||||||
|
# define deflateInit_ z_deflateInit_
|
||||||
|
# define deflate z_deflate
|
||||||
|
# define deflateEnd z_deflateEnd
|
||||||
|
# define inflateInit_ z_inflateInit_
|
||||||
|
# define inflate z_inflate
|
||||||
|
# define inflateEnd z_inflateEnd
|
||||||
|
# define deflateInit2_ z_deflateInit2_
|
||||||
|
# define deflateSetDictionary z_deflateSetDictionary
|
||||||
|
# define deflateCopy z_deflateCopy
|
||||||
|
# define deflateReset z_deflateReset
|
||||||
|
# define deflatePrime z_deflatePrime
|
||||||
|
# define deflateParams z_deflateParams
|
||||||
|
# define deflateBound z_deflateBound
|
||||||
|
# define inflateInit2_ z_inflateInit2_
|
||||||
|
# define inflateSetDictionary z_inflateSetDictionary
|
||||||
|
# define inflateSync z_inflateSync
|
||||||
|
# define inflateSyncPoint z_inflateSyncPoint
|
||||||
|
# define inflateCopy z_inflateCopy
|
||||||
|
# define inflateReset z_inflateReset
|
||||||
|
# define compress z_compress
|
||||||
|
# define compress2 z_compress2
|
||||||
|
# define compressBound z_compressBound
|
||||||
|
# define uncompress z_uncompress
|
||||||
|
# define adler32 z_adler32
|
||||||
|
# define crc32 z_crc32
|
||||||
|
# define get_crc_table z_get_crc_table
|
||||||
|
|
||||||
|
# define Byte z_Byte
|
||||||
|
# define uInt z_uInt
|
||||||
|
# define uLong z_uLong
|
||||||
|
# define Bytef z_Bytef
|
||||||
|
# define charf z_charf
|
||||||
|
# define intf z_intf
|
||||||
|
# define uIntf z_uIntf
|
||||||
|
# define uLongf z_uLongf
|
||||||
|
# define voidpf z_voidpf
|
||||||
|
# define voidp z_voidp
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__MSDOS__) && !defined(MSDOS)
|
||||||
|
# define MSDOS
|
||||||
|
#endif
|
||||||
|
#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
|
||||||
|
# define OS2
|
||||||
|
#endif
|
||||||
|
#if defined(_WINDOWS) && !defined(WINDOWS)
|
||||||
|
# define WINDOWS
|
||||||
|
#endif
|
||||||
|
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
|
||||||
|
# define WIN32
|
||||||
|
#endif
|
||||||
|
#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
|
||||||
|
# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
|
||||||
|
# ifndef SYS16BIT
|
||||||
|
# define SYS16BIT
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compile with -DMAXSEG_64K if the alloc function cannot allocate more
|
||||||
|
* than 64k bytes at a time (needed on systems with 16-bit int).
|
||||||
|
*/
|
||||||
|
#ifdef SYS16BIT
|
||||||
|
# define MAXSEG_64K
|
||||||
|
#endif
|
||||||
|
#ifdef MSDOS
|
||||||
|
# define UNALIGNED_OK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __STDC_VERSION__
|
||||||
|
# ifndef STDC
|
||||||
|
# define STDC
|
||||||
|
# endif
|
||||||
|
# if __STDC_VERSION__ >= 199901L
|
||||||
|
# ifndef STDC99
|
||||||
|
# define STDC99
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
|
||||||
|
# define STDC
|
||||||
|
#endif
|
||||||
|
#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
|
||||||
|
# define STDC
|
||||||
|
#endif
|
||||||
|
#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
|
||||||
|
# define STDC
|
||||||
|
#endif
|
||||||
|
#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
|
||||||
|
# define STDC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
|
||||||
|
# define STDC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef STDC
|
||||||
|
# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
|
||||||
|
# define const /* note: need a more gentle solution here */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Some Mac compilers merge all .h files incorrectly: */
|
||||||
|
#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
|
||||||
|
# define NO_DUMMY_DECL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Maximum value for memLevel in deflateInit2 */
|
||||||
|
#ifndef MAX_MEM_LEVEL
|
||||||
|
# ifdef MAXSEG_64K
|
||||||
|
# define MAX_MEM_LEVEL 8
|
||||||
|
# else
|
||||||
|
# define MAX_MEM_LEVEL 9
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Maximum value for windowBits in deflateInit2 and inflateInit2.
|
||||||
|
* WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
|
||||||
|
* created by gzip. (Files created by minigzip can still be extracted by
|
||||||
|
* gzip.)
|
||||||
|
*/
|
||||||
|
#ifndef MAX_WBITS
|
||||||
|
# define MAX_WBITS 15 /* 32K LZ77 window */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The memory requirements for deflate are (in bytes):
|
||||||
|
(1 << (windowBits+2)) + (1 << (memLevel+9))
|
||||||
|
that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
|
||||||
|
plus a few kilobytes for small objects. For example, if you want to reduce
|
||||||
|
the default memory requirements from 256K to 128K, compile with
|
||||||
|
make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
|
||||||
|
Of course this will generally degrade compression (there's no free lunch).
|
||||||
|
|
||||||
|
The memory requirements for inflate are (in bytes) 1 << windowBits
|
||||||
|
that is, 32K for windowBits=15 (default value) plus a few kilobytes
|
||||||
|
for small objects.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Type declarations */
|
||||||
|
|
||||||
|
#ifndef OF /* function prototypes */
|
||||||
|
# ifdef STDC
|
||||||
|
# define OF(args) args
|
||||||
|
# else
|
||||||
|
# define OF(args) ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following definitions for FAR are needed only for MSDOS mixed
|
||||||
|
* model programming (small or medium model with some far allocations).
|
||||||
|
* This was tested only with MSC; for other MSDOS compilers you may have
|
||||||
|
* to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
|
||||||
|
* just define FAR to be empty.
|
||||||
|
*/
|
||||||
|
#ifdef SYS16BIT
|
||||||
|
# if defined(M_I86SM) || defined(M_I86MM)
|
||||||
|
/* MSC small or medium model */
|
||||||
|
# define SMALL_MEDIUM
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# define FAR _far
|
||||||
|
# else
|
||||||
|
# define FAR far
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# if (defined(__SMALL__) || defined(__MEDIUM__))
|
||||||
|
/* Turbo C small or medium model */
|
||||||
|
# define SMALL_MEDIUM
|
||||||
|
# ifdef __BORLANDC__
|
||||||
|
# define FAR _far
|
||||||
|
# else
|
||||||
|
# define FAR far
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(WINDOWS) || defined(WIN32)
|
||||||
|
/* If building or using zlib as a DLL, define ZLIB_DLL.
|
||||||
|
* This is not mandatory, but it offers a little performance increase.
|
||||||
|
*/
|
||||||
|
# ifdef ZLIB_DLL
|
||||||
|
# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
|
||||||
|
# ifdef ZLIB_INTERNAL
|
||||||
|
# define ZEXTERN extern __declspec(dllexport)
|
||||||
|
# else
|
||||||
|
# define ZEXTERN extern __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif /* ZLIB_DLL */
|
||||||
|
/* If building or using zlib with the WINAPI/WINAPIV calling convention,
|
||||||
|
* define ZLIB_WINAPI.
|
||||||
|
* Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
|
||||||
|
*/
|
||||||
|
# ifdef ZLIB_WINAPI
|
||||||
|
# ifdef FAR
|
||||||
|
# undef FAR
|
||||||
|
# endif
|
||||||
|
# include <windows.h>
|
||||||
|
/* No need for _export, use ZLIB.DEF instead. */
|
||||||
|
/* For complete Windows compatibility, use WINAPI, not __stdcall. */
|
||||||
|
# define ZEXPORT WINAPI
|
||||||
|
# ifdef WIN32
|
||||||
|
# define ZEXPORTVA WINAPIV
|
||||||
|
# else
|
||||||
|
# define ZEXPORTVA FAR CDECL
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__BEOS__)
|
||||||
|
# ifdef ZLIB_DLL
|
||||||
|
# ifdef ZLIB_INTERNAL
|
||||||
|
# define ZEXPORT __declspec(dllexport)
|
||||||
|
# define ZEXPORTVA __declspec(dllexport)
|
||||||
|
# else
|
||||||
|
# define ZEXPORT __declspec(dllimport)
|
||||||
|
# define ZEXPORTVA __declspec(dllimport)
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ZEXTERN
|
||||||
|
# define ZEXTERN extern
|
||||||
|
#endif
|
||||||
|
#ifndef ZEXPORT
|
||||||
|
# define ZEXPORT
|
||||||
|
#endif
|
||||||
|
#ifndef ZEXPORTVA
|
||||||
|
# define ZEXPORTVA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FAR
|
||||||
|
# define FAR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__MACTYPES__)
|
||||||
|
typedef unsigned char Byte; /* 8 bits */
|
||||||
|
#endif
|
||||||
|
typedef unsigned int uInt; /* 16 bits or more */
|
||||||
|
typedef unsigned long uLong; /* 32 bits or more */
|
||||||
|
|
||||||
|
#ifdef SMALL_MEDIUM
|
||||||
|
/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
|
||||||
|
# define Bytef Byte FAR
|
||||||
|
#else
|
||||||
|
typedef Byte FAR Bytef;
|
||||||
|
#endif
|
||||||
|
typedef char FAR charf;
|
||||||
|
typedef int FAR intf;
|
||||||
|
typedef uInt FAR uIntf;
|
||||||
|
typedef uLong FAR uLongf;
|
||||||
|
|
||||||
|
#ifdef STDC
|
||||||
|
typedef void const *voidpc;
|
||||||
|
typedef void FAR *voidpf;
|
||||||
|
typedef void *voidp;
|
||||||
|
#else
|
||||||
|
typedef Byte const *voidpc;
|
||||||
|
typedef Byte FAR *voidpf;
|
||||||
|
typedef Byte *voidp;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */
|
||||||
|
# include <sys/types.h> /* for off_t */
|
||||||
|
# include <unistd.h> /* for SEEK_* and off_t */
|
||||||
|
# ifdef VMS
|
||||||
|
# include <unixio.h> /* for off_t */
|
||||||
|
# endif
|
||||||
|
# define z_off_t off_t
|
||||||
|
#endif
|
||||||
|
#ifndef SEEK_SET
|
||||||
|
# define SEEK_SET 0 /* Seek from beginning of file. */
|
||||||
|
# define SEEK_CUR 1 /* Seek from current position. */
|
||||||
|
# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
|
||||||
|
#endif
|
||||||
|
#ifndef z_off_t
|
||||||
|
# define z_off_t long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__OS400__)
|
||||||
|
#define NO_vsnprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__MVS__)
|
||||||
|
# define NO_vsnprintf
|
||||||
|
# ifdef FAR
|
||||||
|
# undef FAR
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* MVS linker does not support external names larger than 8 bytes */
|
||||||
|
#if defined(__MVS__)
|
||||||
|
# pragma map(deflateInit_,"DEIN")
|
||||||
|
# pragma map(deflateInit2_,"DEIN2")
|
||||||
|
# pragma map(deflateEnd,"DEEND")
|
||||||
|
# pragma map(deflateBound,"DEBND")
|
||||||
|
# pragma map(inflateInit_,"ININ")
|
||||||
|
# pragma map(inflateInit2_,"ININ2")
|
||||||
|
# pragma map(inflateEnd,"INEND")
|
||||||
|
# pragma map(inflateSync,"INSY")
|
||||||
|
# pragma map(inflateSetDictionary,"INSEDI")
|
||||||
|
# pragma map(compressBound,"CMBND")
|
||||||
|
# pragma map(inflate_table,"INTABL")
|
||||||
|
# pragma map(inflate_fast,"INFA")
|
||||||
|
# pragma map(inflate_copyright,"INCOPY")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* ZCONF_H */
|
1200
compiler/amxxpc/zlib.h
Executable file
1200
compiler/amxxpc/zlib.h
Executable file
File diff suppressed because it is too large
Load Diff
BIN
compiler/amxxpc/zlib.lib
Executable file
BIN
compiler/amxxpc/zlib.lib
Executable file
Binary file not shown.
|
@ -249,11 +249,9 @@ typedef struct tagAMX {
|
||||||
cell reset_stk PACKED;
|
cell reset_stk PACKED;
|
||||||
cell reset_hea PACKED;
|
cell reset_hea PACKED;
|
||||||
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
|
cell sysreq_d PACKED; /* relocated address/value for the SYSREQ.D opcode */
|
||||||
#if defined JIT
|
|
||||||
/* support variables for the JIT */
|
/* support variables for the JIT */
|
||||||
int reloc_size PACKED; /* required temporary buffer for relocations */
|
int reloc_size PACKED; /* required temporary buffer for relocations */
|
||||||
long code_size PACKED; /* estimated memory footprint of the native code */
|
long code_size PACKED; /* estimated memory footprint of the native code */
|
||||||
#endif
|
|
||||||
} PACKED AMX;
|
} PACKED AMX;
|
||||||
|
|
||||||
/* The AMX_HEADER structure is both the memory format as the file format. The
|
/* The AMX_HEADER structure is both the memory format as the file format. The
|
||||||
|
@ -279,13 +277,8 @@ typedef struct tagAMX_HEADER {
|
||||||
int32_t nametable PACKED; /* name table */
|
int32_t nametable PACKED; /* name table */
|
||||||
} PACKED AMX_HEADER;
|
} PACKED AMX_HEADER;
|
||||||
|
|
||||||
#if PAWN_CELL_SIZE==16
|
//This is always the same for us
|
||||||
#define AMX_MAGIC 0xf1e2
|
|
||||||
#elif PAWN_CELL_SIZE==32
|
|
||||||
#define AMX_MAGIC 0xf1e0
|
#define AMX_MAGIC 0xf1e0
|
||||||
#elif PAWN_CELL_SIZE==64
|
|
||||||
#define AMX_MAGIC 0xf1e1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
AMX_ERR_NONE,
|
AMX_ERR_NONE,
|
||||||
|
|
|
@ -56,48 +56,13 @@
|
||||||
|
|
||||||
# if defined __WIN32__ || defined _WIN32 || defined WIN32 || defined __NT__
|
# if defined __WIN32__ || defined _WIN32 || defined WIN32 || defined __NT__
|
||||||
__declspec (dllexport)
|
__declspec (dllexport)
|
||||||
void EXCOMPILER(HWND hwnd, HINSTANCE hinst, LPSTR lpCommandLine, int nCmdShow)
|
void EXCOMPILER(int argc, char **argv)
|
||||||
# else
|
# else
|
||||||
void extern EXCOMPILER(HWND hwnd, HINSTANCE hinst, LPSTR lpCommandLine, int nCmdShow)
|
void extern EXCOMPILER(int argc, char **argv)
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
char RootPath[_MAX_PATH];
|
|
||||||
LPSTR ptr;
|
|
||||||
|
|
||||||
/* RUNDLL32 may have passed us a HWND and a HINSTANCE, but we can hardly
|
|
||||||
* trust these. They may not contain values that we can use.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* the root path in argv[0] */
|
|
||||||
GetModuleFileName(hinstDLL, RootPath, sizeof RootPath);
|
|
||||||
argv[argc++]=RootPath;
|
|
||||||
|
|
||||||
/* all other options */
|
|
||||||
assert(lpCommandLine!=NULL);
|
|
||||||
ptr=dll_skipwhite(lpCommandLine);
|
|
||||||
while (*ptr!='\0') {
|
|
||||||
if (*ptr=='"') {
|
|
||||||
argv[argc++]=ptr+1;
|
|
||||||
while (*ptr!='"' && *ptr!='\0')
|
|
||||||
ptr++;
|
|
||||||
} else {
|
|
||||||
argv[argc++]=ptr;
|
|
||||||
while (*ptr>' ')
|
|
||||||
ptr++;
|
|
||||||
} /* if */
|
|
||||||
if (*ptr!='\0')
|
|
||||||
*ptr++='\0';
|
|
||||||
ptr=dll_skipwhite(ptr);
|
|
||||||
} /* while */
|
|
||||||
pc_compile(argc, argv);
|
pc_compile(argc, argv);
|
||||||
UNUSED_PARAM(hwnd);
|
|
||||||
UNUSED_PARAM(hinst);
|
|
||||||
UNUSED_PARAM(nCmdShow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* PAWNC_DLL */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* PAWNC_DLL */
|
#endif /* PAWNC_DLL */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -258,6 +258,9 @@
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
<File
|
||||||
|
RelativePath=".\amx.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\sc.h">
|
RelativePath=".\sc.h">
|
||||||
</File>
|
</File>
|
||||||
|
|
|
@ -409,16 +409,18 @@ SC_FUNC stringlist *insert_dbgline(int linenr)
|
||||||
char string[40];
|
char string[40];
|
||||||
if (linenr>0)
|
if (linenr>0)
|
||||||
linenr--; /* line numbers are zero-based in the debug information */
|
linenr--; /* line numbers are zero-based in the debug information */
|
||||||
#if PAWN_CELL_SIZE==32
|
|
||||||
sprintf(string,"L:%08lx %04x",(long)code_idx,linenr);
|
sprintf(string,"L:%08lx %04x",(long)code_idx,linenr);
|
||||||
#elif PAWN_CELL_SIZE==64
|
|
||||||
sprintf(string,"L:%08Lx %04x",(long)code_idx,linenr);
|
|
||||||
#endif
|
|
||||||
return insert_string(&dbgstrings,string);
|
return insert_string(&dbgstrings,string);
|
||||||
} /* if */
|
} /* if */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define LONGCAST long
|
||||||
|
#else
|
||||||
|
#define LONGCAST cell
|
||||||
|
#endif
|
||||||
|
|
||||||
SC_FUNC stringlist *insert_dbgsymbol(symbol *sym)
|
SC_FUNC stringlist *insert_dbgsymbol(symbol *sym)
|
||||||
{
|
{
|
||||||
if (sc_status==statWRITE && (sc_debug & sSYMBOLIC)!=0) {
|
if (sc_status==statWRITE && (sc_debug & sSYMBOLIC)!=0) {
|
||||||
|
@ -440,10 +442,10 @@ SC_FUNC stringlist *insert_dbgsymbol(symbol *sym)
|
||||||
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
|
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
|
||||||
#elif PAWN_CELL_SIZE==64
|
#elif PAWN_CELL_SIZE==64
|
||||||
if (sym->ident==iFUNCTN)
|
if (sym->ident==iFUNCTN)
|
||||||
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",sym->addr,sym->tag,
|
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",(LONGCAST)sym->addr,sym->tag,
|
||||||
symname,sym->addr,sym->codeaddr,sym->ident,sym->vclass);
|
symname,sym->addr,sym->codeaddr,sym->ident,sym->vclass);
|
||||||
else
|
else
|
||||||
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",sym->addr,sym->tag,
|
sprintf(string,"S:%08Lx %x:%s %08Lx %08Lx %x %x",(LONGCAST)sym->addr,sym->tag,
|
||||||
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
|
symname,sym->codeaddr,code_idx,sym->ident,sym->vclass);
|
||||||
#endif
|
#endif
|
||||||
if (sym->ident==iARRAY || sym->ident==iREFARRAY) {
|
if (sym->ident==iARRAY || sym->ident==iREFARRAY) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user