219 lines
8.9 KiB
C
219 lines
8.9 KiB
C
|
/*
|
||
|
* anylang.h - C/Java/C#/JavaScript/ActionScript abstraction layer
|
||
|
*
|
||
|
* Copyright (C) 2007-2010 Piotr Fusik
|
||
|
*
|
||
|
* This file is part of ASAP (Another Slight Atari Player),
|
||
|
* see http://asap.sourceforge.net
|
||
|
*
|
||
|
* ASAP 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.
|
||
|
*
|
||
|
* ASAP 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 ASAP; if not, write to the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
*/
|
||
|
|
||
|
#ifndef _ANYLANG_H_
|
||
|
#define _ANYLANG_H_
|
||
|
|
||
|
#if defined(JAVA) || defined(CSHARP) || defined(JAVASCRIPT) || defined(ACTIONSCRIPT)
|
||
|
|
||
|
#define FALSE false
|
||
|
#define TRUE true
|
||
|
#define NULL null
|
||
|
#define _ .
|
||
|
#define PRIVATE
|
||
|
#define CONST
|
||
|
#define OUT_STRING STRING
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define C
|
||
|
#include <string.h>
|
||
|
|
||
|
#define PRIVATE static
|
||
|
#define FUNC(type, name, pars) type name pars
|
||
|
#define P(type, name) type name
|
||
|
#define V(type, name) type name
|
||
|
#define CONST const
|
||
|
#define _ ->
|
||
|
#define PTR *
|
||
|
#define ADDRESSOF &
|
||
|
#define CAST(type) (type)
|
||
|
#define TO_INT(x) (int) (x)
|
||
|
#define TO_BYTE(x) (byte) (x)
|
||
|
#define BYTEARRAY byte *
|
||
|
#define BOOLARRAY abool *
|
||
|
#define VOIDPTR void *
|
||
|
#define UBYTE(data) (data)
|
||
|
#define SBYTE(data) (signed char) (data)
|
||
|
#define CONST_ARRAY(type, name) static const type name[] = {
|
||
|
#define END_CONST_ARRAY }
|
||
|
#define ZERO_ARRAY(array) memset(array, 0, sizeof(array))
|
||
|
#define COPY_ARRAY(dest, dest_offset, src, src_offset, len) \
|
||
|
memcpy(dest + dest_offset, src + src_offset, len)
|
||
|
#define NEW_ARRAY(type, name, size) \
|
||
|
type name[size]
|
||
|
#define INIT_ARRAY(array) memset(array, 0, sizeof(array))
|
||
|
#define STRING const char *
|
||
|
#define OUT_STRING char *
|
||
|
#define CHARAT(s, i) (s)[i]
|
||
|
#define CHARCODEAT(s, i) (s)[i]
|
||
|
#define CHARCODE(c) (c)
|
||
|
#define EQUAL_STRINGS(s1, s2) (strcmp(s1, s2) == 0)
|
||
|
#define EMPTY_STRING(s) (s)[0] = '\0'
|
||
|
#define SUBSTR(s, i) (s + i)
|
||
|
#define BYTES_TO_STRING(dest, src, src_offset, len) \
|
||
|
do { memcpy(dest, src + src_offset, len); (dest)[len] = '\0'; } while (FALSE)
|
||
|
#define SUBSTRING(dest, src, src_offset, len) \
|
||
|
do { memcpy(dest, src + src_offset, len); (dest)[len] = '\0'; } while (FALSE)
|
||
|
|
||
|
#define RESOURCE const byte *
|
||
|
#define GET_RESOURCE(name, ext) name##_##ext
|
||
|
|
||
|
#endif /* defined(JAVA) || defined(CSHARP) || defined(JAVASCRIPT) || defined(ACTIONSCRIPT) */
|
||
|
|
||
|
#ifdef JAVA
|
||
|
|
||
|
#define abool boolean
|
||
|
#define FUNC(type, name, pars) private static type name pars
|
||
|
#define P(type, name) type name
|
||
|
#define V(type, name) type name
|
||
|
#define PTR
|
||
|
#define ADDRESSOF
|
||
|
#define CAST(type) (type)
|
||
|
#define TO_INT(x) (int) (x)
|
||
|
#define TO_BYTE(x) (byte) (x)
|
||
|
#define BYTEARRAY byte[]
|
||
|
#define BOOLARRAY boolean[]
|
||
|
#define VOIDPTR byte[]
|
||
|
#define UBYTE(data) ((data) & 0xff)
|
||
|
#define SBYTE(data) (byte) (data)
|
||
|
#define CONST_ARRAY(type, name) private static final type[] name = {
|
||
|
#define END_CONST_ARRAY }
|
||
|
#define sizeof(array) array.length
|
||
|
#define ZERO_ARRAY(array) for (int ii = 0; ii < array.length; ii++) array[ii] = 0
|
||
|
#define COPY_ARRAY(dest, dest_offset, src, src_offset, len) \
|
||
|
System.arraycopy(src, src_offset, dest, dest_offset, len)
|
||
|
#define NEW_ARRAY(type, name, size) \
|
||
|
type[] name = new type[size]
|
||
|
#define INIT_ARRAY(array)
|
||
|
#define STRING String
|
||
|
#define CHARAT(s, i) (s).charAt(i)
|
||
|
#define CHARCODEAT(s, i) (s).charAt(i)
|
||
|
#define CHARCODE(c) (c)
|
||
|
#define strlen(s) (s).length()
|
||
|
#define EQUAL_STRINGS(s1, s2) (s1).equals(s2)
|
||
|
#define EMPTY_STRING(s) (s) = ""
|
||
|
#define SUBSTR(s, i) (s).substring(i)
|
||
|
#define BYTES_TO_STRING(dest, src, src_offset, len) \
|
||
|
(dest) = new String(src, src_offset, len)
|
||
|
#define SUBSTRING(dest, src, src_offset, len) \
|
||
|
(dest) = (src).substring(src_offset, src_offset + len)
|
||
|
|
||
|
#define RESOURCE byte[]
|
||
|
#define GET_RESOURCE(name, ext) getResourceBytes(#name + "." + #ext)
|
||
|
|
||
|
#elif defined(CSHARP)
|
||
|
|
||
|
#define abool bool
|
||
|
#define FUNC(type, name, pars) private static type name pars
|
||
|
#define P(type, name) type name
|
||
|
#define V(type, name) type name
|
||
|
#define PTR
|
||
|
#define ADDRESSOF
|
||
|
#define CAST(type) (type)
|
||
|
#define TO_INT(x) (int) (x)
|
||
|
#define TO_BYTE(x) (byte) (x)
|
||
|
#define BYTEARRAY byte[]
|
||
|
#define BOOLARRAY bool[]
|
||
|
#define VOIDPTR byte[]
|
||
|
#define UBYTE(data) (data)
|
||
|
#define SBYTE(data) (sbyte) (data)
|
||
|
#define CONST_ARRAY(type, name) private static readonly type[] name = {
|
||
|
#define END_CONST_ARRAY }
|
||
|
#define sizeof(array) array.Length
|
||
|
#define ZERO_ARRAY(array) Array.Clear(array, 0, array.Length)
|
||
|
#define COPY_ARRAY(dest, dest_offset, src, src_offset, len) \
|
||
|
Array.Copy(src, src_offset, dest, dest_offset, len)
|
||
|
#define NEW_ARRAY(type, name, size) \
|
||
|
type[] name = new type[size]
|
||
|
#define INIT_ARRAY(array)
|
||
|
#define STRING string
|
||
|
#define CHARAT(s, i) (s)[i]
|
||
|
#define CHARCODEAT(s, i) (s)[i]
|
||
|
#define CHARCODE(c) (c)
|
||
|
#define strlen(s) (s).Length
|
||
|
#define EQUAL_STRINGS(s1, s2) ((s1) == (s2))
|
||
|
#define EMPTY_STRING(s) (s) = string.Empty
|
||
|
#define SUBSTR(s, i) (s).Substring(i)
|
||
|
#define BYTES_TO_STRING(dest, src, src_offset, len) \
|
||
|
(dest) = System.Text.Encoding.ASCII.GetString(src, src_offset, len)
|
||
|
#define SUBSTRING(dest, src, src_offset, len) \
|
||
|
(dest) = (src).Substring(src_offset, len)
|
||
|
|
||
|
#define RESOURCE byte[]
|
||
|
#define GET_RESOURCE(name, ext) name##_##ext
|
||
|
|
||
|
#elif defined(JAVASCRIPT) || defined(ACTIONSCRIPT)
|
||
|
|
||
|
#ifdef ACTIONSCRIPT
|
||
|
#define abool Boolean
|
||
|
#define char String
|
||
|
#define STRING String
|
||
|
#define BYTEARRAY ByteArray
|
||
|
#define BOOLARRAY Array
|
||
|
#define VOIDPTR ByteArray
|
||
|
#define RESOURCE Array
|
||
|
#define FUNC(type, name, pars) private static function name pars : type
|
||
|
#define P(type, name) name : type
|
||
|
#define V(type, name) var name : type
|
||
|
#define TO_INT(x) int(x)
|
||
|
#define CONST_ARRAY(type, name) private static const name : Array = [
|
||
|
#else
|
||
|
#define FUNC(type, name, pars) function name pars
|
||
|
#define P(type, name) name
|
||
|
#define V(type, name) var name
|
||
|
#define TO_INT(x) Math.floor(x)
|
||
|
#define CONST_ARRAY(type, name) var name = [
|
||
|
#endif
|
||
|
#define PTR
|
||
|
#define ADDRESSOF
|
||
|
#define CAST(type)
|
||
|
#define TO_BYTE(x) ((x) & 0xff)
|
||
|
#define UBYTE(data) (data)
|
||
|
#define SBYTE(data) ((data) < 0x80 ? (data) : (data) - 256)
|
||
|
#define END_CONST_ARRAY ]
|
||
|
#define sizeof(array) array.length
|
||
|
#define ZERO_ARRAY(array) for (V(int, ii) = 0; ii < array.length; ii++) array[ii] = 0
|
||
|
#define COPY_ARRAY(dest, dest_offset, src, src_offset, len) \
|
||
|
for (V(int, ii) = 0; ii < len; ii++) dest[dest_offset + ii] = src[src_offset + ii]
|
||
|
#define NEW_ARRAY(type, name, size) \
|
||
|
V(Array, name) = new Array(size)
|
||
|
#define INIT_ARRAY(array) for (V(int, ii) = 0; ii < array.length; ii++) array[ii] = 0
|
||
|
#define CHARAT(s, i) (s).charAt(i)
|
||
|
#define CHARCODEAT(s, i) (s).charCodeAt(i)
|
||
|
#define CHARCODE(c) (c).charCodeAt(0)
|
||
|
#define strlen(s) (s).length
|
||
|
#define EQUAL_STRINGS(s1, s2) ((s1) == (s2))
|
||
|
#define EMPTY_STRING(s) s = ""
|
||
|
#define SUBSTR(s, i) (s).substr(i)
|
||
|
#define BYTES_TO_STRING(dest, src, src_offset, len) \
|
||
|
{ dest = ""; for (V(int, ii) = 0; ii < len; ii++) dest += String.fromCharCode(src[src_offset + ii]); }
|
||
|
#define SUBSTRING(dest, src, src_offset, len) \
|
||
|
dest = (src).substring(src_offset, src_offset + len)
|
||
|
|
||
|
#define GET_RESOURCE(name, ext) name##_##ext
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif /* _ANYLANG_H_ */
|