Ver Fonte

hl_console cleanup

ncannasse há 7 anos atrás
pai
commit
7af111a38f
10 ficheiros alterados com 289 adições e 333 exclusões
  1. 1 1
      include/vorbis/ogg/config_types.h
  2. 223 223
      libs/fmt/fmt.c
  3. 2 16
      libs/sdl/gl.c
  4. 10 10
      src/alloc.c
  5. 9 1
      src/hl.h
  6. 12 0
      src/hlc_main.c
  7. 4 8
      src/std/date.c
  8. 3 5
      src/std/random.c
  9. 10 13
      src/std/socket.c
  10. 15 56
      src/std/sys.c

+ 1 - 1
include/vorbis/ogg/config_types.h

@@ -1,7 +1,7 @@
 
 // include by os_types.h as a fallback
 
-#if defined(__ORBIS__)
+#if defined(__ORBIS__) || defined(__NX__)
 
 #  include <sys/types.h>
 typedef short ogg_int16_t;

+ 223 - 223
libs/fmt/fmt.c

@@ -2,8 +2,8 @@
 #include <png.h>
 #include <hl.h>
 
-#ifdef HL_PS
-extern bool ps_jpg_decode( vbyte *data, int dataLen, vbyte *out, int width, int height, int stride, int format, int flags );
+#ifdef HL_CONSOLE
+extern bool sys_jpg_decode( vbyte *data, int dataLen, vbyte *out, int width, int height, int stride, int format, int flags );
 #else
 #	include <turbojpeg.h>
 #endif
@@ -18,8 +18,8 @@ typedef struct {
 } pixel;
 
 HL_PRIM bool HL_NAME(jpg_decode)( vbyte *data, int dataLen, vbyte *out, int width, int height, int stride, int format, int flags ) {
-#ifdef HL_PS
-	return ps_jpg_decode(data, dataLen, out, width, height, stride, format, flags);
+#ifdef HL_CONSOLE
+	return sys_jpg_decode(data, dataLen, out, width, height, stride, format, flags);
 #else
 	tjhandle h = tjInitDecompress();
 	int result;
@@ -398,225 +398,225 @@ DEFINE_PRIM(_I32, ogg_read, _OGG _BYTES _I32 _I32);
 typedef unsigned int uint32;
 typedef unsigned char uint8;
 
-typedef struct {
-    uint32 total[2];
-    uint32 state[4];
-    uint8 buffer[64];
-} md5_context;
-
-#define GET_UINT32(n,b,i)                       \
-{                                               \
-    (n) = ( (uint32) (b)[(i)    ]       )       \
-        | ( (uint32) (b)[(i) + 1] <<  8 )       \
-        | ( (uint32) (b)[(i) + 2] << 16 )       \
-        | ( (uint32) (b)[(i) + 3] << 24 );      \
-}
-
-#define PUT_UINT32(n,b,i)                       \
-{                                               \
-    (b)[(i)    ] = (uint8) ( (n)       );       \
-    (b)[(i) + 1] = (uint8) ( (n) >>  8 );       \
-    (b)[(i) + 2] = (uint8) ( (n) >> 16 );       \
-    (b)[(i) + 3] = (uint8) ( (n) >> 24 );       \
-}
-
-static void md5_starts( md5_context *ctx ) {
-    ctx->total[0] = 0;
-    ctx->total[1] = 0;
-    ctx->state[0] = 0x67452301;
-    ctx->state[1] = 0xEFCDAB89;
-    ctx->state[2] = 0x98BADCFE;
-    ctx->state[3] = 0x10325476;
-}
-
-static void md5_process( md5_context *ctx, uint8 data[64] ) {
-    uint32 X[16], A, B, C, D;
-    GET_UINT32( X[0],  data,  0 );
-    GET_UINT32( X[1],  data,  4 );
-    GET_UINT32( X[2],  data,  8 );
-    GET_UINT32( X[3],  data, 12 );
-    GET_UINT32( X[4],  data, 16 );
-    GET_UINT32( X[5],  data, 20 );
-    GET_UINT32( X[6],  data, 24 );
-    GET_UINT32( X[7],  data, 28 );
-    GET_UINT32( X[8],  data, 32 );
-    GET_UINT32( X[9],  data, 36 );
-    GET_UINT32( X[10], data, 40 );
-    GET_UINT32( X[11], data, 44 );
-    GET_UINT32( X[12], data, 48 );
-    GET_UINT32( X[13], data, 52 );
-    GET_UINT32( X[14], data, 56 );
-    GET_UINT32( X[15], data, 60 );
-
-#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
-
-#define P(a,b,c,d,k,s,t)                                \
-{                                                       \
-    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \
-}
-
-    A = ctx->state[0];
-    B = ctx->state[1];
-    C = ctx->state[2];
-    D = ctx->state[3];
-
-#define F(x,y,z) (z ^ (x & (y ^ z)))
-
-    P( A, B, C, D,  0,  7, 0xD76AA478 );
-    P( D, A, B, C,  1, 12, 0xE8C7B756 );
-    P( C, D, A, B,  2, 17, 0x242070DB );
-    P( B, C, D, A,  3, 22, 0xC1BDCEEE );
-    P( A, B, C, D,  4,  7, 0xF57C0FAF );
-    P( D, A, B, C,  5, 12, 0x4787C62A );
-    P( C, D, A, B,  6, 17, 0xA8304613 );
-    P( B, C, D, A,  7, 22, 0xFD469501 );
-    P( A, B, C, D,  8,  7, 0x698098D8 );
-    P( D, A, B, C,  9, 12, 0x8B44F7AF );
-    P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
-    P( B, C, D, A, 11, 22, 0x895CD7BE );
-    P( A, B, C, D, 12,  7, 0x6B901122 );
-    P( D, A, B, C, 13, 12, 0xFD987193 );
-    P( C, D, A, B, 14, 17, 0xA679438E );
-    P( B, C, D, A, 15, 22, 0x49B40821 );
-
-#undef F
-
-#define F(x,y,z) (y ^ (z & (x ^ y)))
-
-    P( A, B, C, D,  1,  5, 0xF61E2562 );
-    P( D, A, B, C,  6,  9, 0xC040B340 );
-    P( C, D, A, B, 11, 14, 0x265E5A51 );
-    P( B, C, D, A,  0, 20, 0xE9B6C7AA );
-    P( A, B, C, D,  5,  5, 0xD62F105D );
-    P( D, A, B, C, 10,  9, 0x02441453 );
-    P( C, D, A, B, 15, 14, 0xD8A1E681 );
-    P( B, C, D, A,  4, 20, 0xE7D3FBC8 );
-    P( A, B, C, D,  9,  5, 0x21E1CDE6 );
-    P( D, A, B, C, 14,  9, 0xC33707D6 );
-    P( C, D, A, B,  3, 14, 0xF4D50D87 );
-    P( B, C, D, A,  8, 20, 0x455A14ED );
-    P( A, B, C, D, 13,  5, 0xA9E3E905 );
-    P( D, A, B, C,  2,  9, 0xFCEFA3F8 );
-    P( C, D, A, B,  7, 14, 0x676F02D9 );
-    P( B, C, D, A, 12, 20, 0x8D2A4C8A );
-
-#undef F
-    
-#define F(x,y,z) (x ^ y ^ z)
-
-    P( A, B, C, D,  5,  4, 0xFFFA3942 );
-    P( D, A, B, C,  8, 11, 0x8771F681 );
-    P( C, D, A, B, 11, 16, 0x6D9D6122 );
-    P( B, C, D, A, 14, 23, 0xFDE5380C );
-    P( A, B, C, D,  1,  4, 0xA4BEEA44 );
-    P( D, A, B, C,  4, 11, 0x4BDECFA9 );
-    P( C, D, A, B,  7, 16, 0xF6BB4B60 );
-    P( B, C, D, A, 10, 23, 0xBEBFBC70 );
-    P( A, B, C, D, 13,  4, 0x289B7EC6 );
-    P( D, A, B, C,  0, 11, 0xEAA127FA );
-    P( C, D, A, B,  3, 16, 0xD4EF3085 );
-    P( B, C, D, A,  6, 23, 0x04881D05 );
-    P( A, B, C, D,  9,  4, 0xD9D4D039 );
-    P( D, A, B, C, 12, 11, 0xE6DB99E5 );
-    P( C, D, A, B, 15, 16, 0x1FA27CF8 );
-    P( B, C, D, A,  2, 23, 0xC4AC5665 );
-
-#undef F
-
-#define F(x,y,z) (y ^ (x | ~z))
-
-    P( A, B, C, D,  0,  6, 0xF4292244 );
-    P( D, A, B, C,  7, 10, 0x432AFF97 );
-    P( C, D, A, B, 14, 15, 0xAB9423A7 );
-    P( B, C, D, A,  5, 21, 0xFC93A039 );
-    P( A, B, C, D, 12,  6, 0x655B59C3 );
-    P( D, A, B, C,  3, 10, 0x8F0CCC92 );
-    P( C, D, A, B, 10, 15, 0xFFEFF47D );
-    P( B, C, D, A,  1, 21, 0x85845DD1 );
-    P( A, B, C, D,  8,  6, 0x6FA87E4F );
-    P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
-    P( C, D, A, B,  6, 15, 0xA3014314 );
-    P( B, C, D, A, 13, 21, 0x4E0811A1 );
-    P( A, B, C, D,  4,  6, 0xF7537E82 );
-    P( D, A, B, C, 11, 10, 0xBD3AF235 );
-    P( C, D, A, B,  2, 15, 0x2AD7D2BB );
-    P( B, C, D, A,  9, 21, 0xEB86D391 );
-
-#undef F
-
-    ctx->state[0] += A;
-    ctx->state[1] += B;
-    ctx->state[2] += C;
-    ctx->state[3] += D;
-}
-
-static void md5_update( md5_context *ctx, uint8 *input, uint32 length ) {
-    uint32 left, fill;
-    if( !length )
-		return;
-    left = ctx->total[0] & 0x3F;
-    fill = 64 - left;
-
-    ctx->total[0] += length;
-    ctx->total[0] &= 0xFFFFFFFF;
-
-    if( ctx->total[0] < length )
-        ctx->total[1]++;
-
-    if( left && length >= fill ) {
-        memcpy( (void *) (ctx->buffer + left),
-                (void *) input, fill );
-        md5_process( ctx, ctx->buffer );
-        length -= fill;
-        input  += fill;
-        left = 0;
-    }
-
-    while( length >= 64 ) {
-        md5_process( ctx, input );
-        length -= 64;
-        input  += 64;
-    }
-
-    if( length ) {
-        memcpy( (void *) (ctx->buffer + left),
-                (void *) input, length );
-    }
-}
-
-static uint8 md5_padding[64] =
-{
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static void md5_finish( md5_context *ctx, uint8 digest[16] ) {
-    uint32 last, padn;
-    uint32 high, low;
-    uint8 msglen[8];
-
-    high = ( ctx->total[0] >> 29 )
-         | ( ctx->total[1] <<  3 );
-    low  = ( ctx->total[0] <<  3 );
-
-    PUT_UINT32( low,  msglen, 0 );
-    PUT_UINT32( high, msglen, 4 );
-
-    last = ctx->total[0] & 0x3F;
-    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
-
-    md5_update( ctx, md5_padding, padn );
-    md5_update( ctx, msglen, 8 );
-
-    PUT_UINT32( ctx->state[0], digest,  0 );
-    PUT_UINT32( ctx->state[1], digest,  4 );
-    PUT_UINT32( ctx->state[2], digest,  8 );
-    PUT_UINT32( ctx->state[3], digest, 12 );
-}
-
-#include "sha1.h"
+typedef struct {
+    uint32 total[2];
+    uint32 state[4];
+    uint8 buffer[64];
+} md5_context;
+
+#define GET_UINT32(n,b,i)                       \
+{                                               \
+    (n) = ( (uint32) (b)[(i)    ]       )       \
+        | ( (uint32) (b)[(i) + 1] <<  8 )       \
+        | ( (uint32) (b)[(i) + 2] << 16 )       \
+        | ( (uint32) (b)[(i) + 3] << 24 );      \
+}
+
+#define PUT_UINT32(n,b,i)                       \
+{                                               \
+    (b)[(i)    ] = (uint8) ( (n)       );       \
+    (b)[(i) + 1] = (uint8) ( (n) >>  8 );       \
+    (b)[(i) + 2] = (uint8) ( (n) >> 16 );       \
+    (b)[(i) + 3] = (uint8) ( (n) >> 24 );       \
+}
+
+static void md5_starts( md5_context *ctx ) {
+    ctx->total[0] = 0;
+    ctx->total[1] = 0;
+    ctx->state[0] = 0x67452301;
+    ctx->state[1] = 0xEFCDAB89;
+    ctx->state[2] = 0x98BADCFE;
+    ctx->state[3] = 0x10325476;
+}
+
+static void md5_process( md5_context *ctx, uint8 data[64] ) {
+    uint32 X[16], A, B, C, D;
+    GET_UINT32( X[0],  data,  0 );
+    GET_UINT32( X[1],  data,  4 );
+    GET_UINT32( X[2],  data,  8 );
+    GET_UINT32( X[3],  data, 12 );
+    GET_UINT32( X[4],  data, 16 );
+    GET_UINT32( X[5],  data, 20 );
+    GET_UINT32( X[6],  data, 24 );
+    GET_UINT32( X[7],  data, 28 );
+    GET_UINT32( X[8],  data, 32 );
+    GET_UINT32( X[9],  data, 36 );
+    GET_UINT32( X[10], data, 40 );
+    GET_UINT32( X[11], data, 44 );
+    GET_UINT32( X[12], data, 48 );
+    GET_UINT32( X[13], data, 52 );
+    GET_UINT32( X[14], data, 56 );
+    GET_UINT32( X[15], data, 60 );
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define P(a,b,c,d,k,s,t)                                \
+{                                                       \
+    a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \
+}
+
+    A = ctx->state[0];
+    B = ctx->state[1];
+    C = ctx->state[2];
+    D = ctx->state[3];
+
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+
+    P( A, B, C, D,  0,  7, 0xD76AA478 );
+    P( D, A, B, C,  1, 12, 0xE8C7B756 );
+    P( C, D, A, B,  2, 17, 0x242070DB );
+    P( B, C, D, A,  3, 22, 0xC1BDCEEE );
+    P( A, B, C, D,  4,  7, 0xF57C0FAF );
+    P( D, A, B, C,  5, 12, 0x4787C62A );
+    P( C, D, A, B,  6, 17, 0xA8304613 );
+    P( B, C, D, A,  7, 22, 0xFD469501 );
+    P( A, B, C, D,  8,  7, 0x698098D8 );
+    P( D, A, B, C,  9, 12, 0x8B44F7AF );
+    P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
+    P( B, C, D, A, 11, 22, 0x895CD7BE );
+    P( A, B, C, D, 12,  7, 0x6B901122 );
+    P( D, A, B, C, 13, 12, 0xFD987193 );
+    P( C, D, A, B, 14, 17, 0xA679438E );
+    P( B, C, D, A, 15, 22, 0x49B40821 );
+
+#undef F
+
+#define F(x,y,z) (y ^ (z & (x ^ y)))
+
+    P( A, B, C, D,  1,  5, 0xF61E2562 );
+    P( D, A, B, C,  6,  9, 0xC040B340 );
+    P( C, D, A, B, 11, 14, 0x265E5A51 );
+    P( B, C, D, A,  0, 20, 0xE9B6C7AA );
+    P( A, B, C, D,  5,  5, 0xD62F105D );
+    P( D, A, B, C, 10,  9, 0x02441453 );
+    P( C, D, A, B, 15, 14, 0xD8A1E681 );
+    P( B, C, D, A,  4, 20, 0xE7D3FBC8 );
+    P( A, B, C, D,  9,  5, 0x21E1CDE6 );
+    P( D, A, B, C, 14,  9, 0xC33707D6 );
+    P( C, D, A, B,  3, 14, 0xF4D50D87 );
+    P( B, C, D, A,  8, 20, 0x455A14ED );
+    P( A, B, C, D, 13,  5, 0xA9E3E905 );
+    P( D, A, B, C,  2,  9, 0xFCEFA3F8 );
+    P( C, D, A, B,  7, 14, 0x676F02D9 );
+    P( B, C, D, A, 12, 20, 0x8D2A4C8A );
+
+#undef F
+    
+#define F(x,y,z) (x ^ y ^ z)
+
+    P( A, B, C, D,  5,  4, 0xFFFA3942 );
+    P( D, A, B, C,  8, 11, 0x8771F681 );
+    P( C, D, A, B, 11, 16, 0x6D9D6122 );
+    P( B, C, D, A, 14, 23, 0xFDE5380C );
+    P( A, B, C, D,  1,  4, 0xA4BEEA44 );
+    P( D, A, B, C,  4, 11, 0x4BDECFA9 );
+    P( C, D, A, B,  7, 16, 0xF6BB4B60 );
+    P( B, C, D, A, 10, 23, 0xBEBFBC70 );
+    P( A, B, C, D, 13,  4, 0x289B7EC6 );
+    P( D, A, B, C,  0, 11, 0xEAA127FA );
+    P( C, D, A, B,  3, 16, 0xD4EF3085 );
+    P( B, C, D, A,  6, 23, 0x04881D05 );
+    P( A, B, C, D,  9,  4, 0xD9D4D039 );
+    P( D, A, B, C, 12, 11, 0xE6DB99E5 );
+    P( C, D, A, B, 15, 16, 0x1FA27CF8 );
+    P( B, C, D, A,  2, 23, 0xC4AC5665 );
+
+#undef F
+
+#define F(x,y,z) (y ^ (x | ~z))
+
+    P( A, B, C, D,  0,  6, 0xF4292244 );
+    P( D, A, B, C,  7, 10, 0x432AFF97 );
+    P( C, D, A, B, 14, 15, 0xAB9423A7 );
+    P( B, C, D, A,  5, 21, 0xFC93A039 );
+    P( A, B, C, D, 12,  6, 0x655B59C3 );
+    P( D, A, B, C,  3, 10, 0x8F0CCC92 );
+    P( C, D, A, B, 10, 15, 0xFFEFF47D );
+    P( B, C, D, A,  1, 21, 0x85845DD1 );
+    P( A, B, C, D,  8,  6, 0x6FA87E4F );
+    P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
+    P( C, D, A, B,  6, 15, 0xA3014314 );
+    P( B, C, D, A, 13, 21, 0x4E0811A1 );
+    P( A, B, C, D,  4,  6, 0xF7537E82 );
+    P( D, A, B, C, 11, 10, 0xBD3AF235 );
+    P( C, D, A, B,  2, 15, 0x2AD7D2BB );
+    P( B, C, D, A,  9, 21, 0xEB86D391 );
+
+#undef F
+
+    ctx->state[0] += A;
+    ctx->state[1] += B;
+    ctx->state[2] += C;
+    ctx->state[3] += D;
+}
+
+static void md5_update( md5_context *ctx, uint8 *input, uint32 length ) {
+    uint32 left, fill;
+    if( !length )
+		return;
+    left = ctx->total[0] & 0x3F;
+    fill = 64 - left;
+
+    ctx->total[0] += length;
+    ctx->total[0] &= 0xFFFFFFFF;
+
+    if( ctx->total[0] < length )
+        ctx->total[1]++;
+
+    if( left && length >= fill ) {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, fill );
+        md5_process( ctx, ctx->buffer );
+        length -= fill;
+        input  += fill;
+        left = 0;
+    }
+
+    while( length >= 64 ) {
+        md5_process( ctx, input );
+        length -= 64;
+        input  += 64;
+    }
+
+    if( length ) {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, length );
+    }
+}
+
+static uint8 md5_padding[64] =
+{
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static void md5_finish( md5_context *ctx, uint8 digest[16] ) {
+    uint32 last, padn;
+    uint32 high, low;
+    uint8 msglen[8];
+
+    high = ( ctx->total[0] >> 29 )
+         | ( ctx->total[1] <<  3 );
+    low  = ( ctx->total[0] <<  3 );
+
+    PUT_UINT32( low,  msglen, 0 );
+    PUT_UINT32( high, msglen, 4 );
+
+    last = ctx->total[0] & 0x3F;
+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
+
+    md5_update( ctx, md5_padding, padn );
+    md5_update( ctx, msglen, 8 );
+
+    PUT_UINT32( ctx->state[0], digest,  0 );
+    PUT_UINT32( ctx->state[1], digest,  4 );
+    PUT_UINT32( ctx->state[2], digest,  8 );
+    PUT_UINT32( ctx->state[3], digest, 12 );
+}
+
+#include "sha1.h"
 
 HL_PRIM void HL_NAME(digest)( vbyte *out, vbyte *in, int length, int format ) {
 	if( format & 256 ) {

+ 2 - 16
libs/sdl/gl.c

@@ -9,24 +9,14 @@
 #	include <GL/GLU.h>
 #	include <glext.h>
 #elif defined(HL_PS)
-#	include <GLES3/gl3.h>
-#	undef HL_NAME
-#	define HL_NAME(n) ps_##n
-#	define glClearDepth glClearDepthf
-#	define NOIMPL	hl_error("Not implemented")
-#	define glGetQueryObjectiv(...)	NOIMPL
-#	define glGetQueryObjectui64v(...) NOIMPL
-#	define glQueryCounter(...) NOIMPL
-#	define glBindFragDataLocation(...)	// noop
+#	include <graphic/ps_gl.h>
 #else
 #	include <SDL2/SDL.h>
 #	include <GL/glu.h>
 #	include <GL/glext.h>
 #endif
 
-#ifdef HL_PS
-#define GL_IMPORT(fun, t)
-#else
+#ifndef HL_CONSOLE
 #define GL_IMPORT(fun, t) PFNGL##t##PROC fun
 #include "GLImports.h"
 #undef GL_IMPORT
@@ -289,13 +279,11 @@ HL_PRIM vdynamic *HL_NAME(gl_create_shader)( int type ) {
 	return alloc_i32(s);
 }
 
-#ifndef HL_PS
 HL_PRIM void HL_NAME(gl_shader_source)( vdynamic *s, vstring *src ) {
 	const GLchar *c = (GLchar*)hl_to_utf8(src->bytes);
 	GLOG("%d,%s",s->v.i,c);
 	glShaderSource(s->v.i, 1, &c, NULL);
 }
-#endif
 
 HL_PRIM void HL_NAME(gl_compile_shader)( vdynamic *s ) {
 	GLOG("%d",s->v.i);
@@ -620,9 +608,7 @@ DEFINE_PRIM(_NULL(_I32),gl_get_uniform_location,_NULL(_I32) _STRING);
 DEFINE_PRIM(_I32,gl_get_attrib_location,_NULL(_I32) _STRING);
 DEFINE_PRIM(_VOID,gl_use_program,_NULL(_I32));
 DEFINE_PRIM(_NULL(_I32),gl_create_shader,_I32);
-#ifndef HL_PS
 DEFINE_PRIM(_VOID,gl_shader_source,_NULL(_I32) _STRING);
-#endif
 DEFINE_PRIM(_VOID,gl_compile_shader,_NULL(_I32));
 DEFINE_PRIM(_BYTES,gl_get_shader_info_bytes,_NULL(_I32));
 DEFINE_PRIM(_DYN,gl_get_shader_parameter,_NULL(_I32) _I32);

+ 10 - 10
src/alloc.c

@@ -890,7 +890,7 @@ static void hl_gc_init( void *stack_top ) {
 		hl_fatal("Invalid builtin tl1");
 	if( TRAILING_ZEROES((unsigned)~0x080003FF) != 10 || TRAILING_ZEROES(0) != 32 || TRAILING_ZEROES(0xFFFFFFFF) != 0 )
 		hl_fatal("Invalid builtin tl0");
-#	ifndef HL_PS
+#	ifndef HL_CONSOLE
 	if( getenv("HL_GC_PROFILE") )
 		gc_flags |= GC_PROFILE;
 	if( getenv("HL_DUMP_MEMORY") )
@@ -995,7 +995,7 @@ HL_PRIM void *hl_alloc_executable_memory( int size ) {
 	start_address += size + ((-size) & (GC_PAGE_SIZE - 1));
 #	endif
 	return ptr;
-#elif defined(HL_PS)
+#elif defined(HL_CONSOLE)
 	return NULL;
 #else
 	void *p;
@@ -1007,14 +1007,14 @@ HL_PRIM void *hl_alloc_executable_memory( int size ) {
 HL_PRIM void hl_free_executable_memory( void *c, int size ) {
 #if defined(HL_WIN)
 	VirtualFree(c,0,MEM_RELEASE);
-#elif !defined(HL_PS)
+#elif !defined(HL_CONSOLE)
 	munmap(c, size);
 #endif
 }
 
-#ifdef HL_PS
-void *ps_alloc_align( int size, int align );
-void ps_free_align( void *ptr, int size );
+#ifdef HL_CONSOLE
+void *sys_alloc_align( int size, int align );
+void sys_free_align( void *ptr, int size );
 #endif
 
 static void *gc_alloc_page_memory( int size ) {
@@ -1028,8 +1028,8 @@ static void *gc_alloc_page_memory( int size ) {
 	start_address += size + ((-size) & (GC_PAGE_SIZE - 1));
 #	endif
 	return ptr;
-#elif defined(HL_PS)
-	return ps_alloc_align(size, GC_PAGE_SIZE);
+#elif defined(HL_CONSOLE)
+	return sys_alloc_align(size, GC_PAGE_SIZE);
 #else
 	void *ptr;
 	if( posix_memalign(&ptr,GC_PAGE_SIZE,size) )
@@ -1041,8 +1041,8 @@ static void *gc_alloc_page_memory( int size ) {
 static void gc_free_page_memory( void *ptr, int size ) {
 #ifdef HL_WIN
 	VirtualFree(ptr, 0, MEM_RELEASE);
-#elif defined(HL_PS)
-	ps_free_align(ptr,size);
+#elif defined(HL_CONSOLE)
+	sys_free_align(ptr,size);
 #else
 	free(ptr);
 #endif

+ 9 - 1
src/hl.h

@@ -41,7 +41,15 @@
 #	define HL_PS
 #endif
 
-#if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && !defined(HL_PS)
+#ifdef __NX__
+#	define HL_NX
+#endif
+
+#if defined(HL_PS) || defined(HL_NX)
+#	define HL_CONSOLE
+#endif
+
+#if (defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && !defined(HL_CONSOLE)
 #	define HL_BSD
 #endif
 

+ 12 - 0
src/hlc_main.c

@@ -27,6 +27,12 @@
 #	pragma comment(lib, "Dbghelp.lib")
 #endif
 
+#ifdef HL_CONSOLE
+extern void sys_global_init();
+extern void sys_global_exit();
+#endif
+
+
 #ifdef HL_VCC
 #	include <crtdbg.h>
 #else
@@ -90,6 +96,9 @@ int main(int argc, char *argv[]) {
 #endif
 	hl_trap_ctx ctx;
 	vdynamic *exc;
+#	ifdef HL_CONSOLE
+	sys_global_init();
+#	endif
 	hl_global_init(&ctx);
 	hl_setup_exception(hlc_resolve_symbol,hlc_capture_stack);
 	hl_setup_callbacks(hlc_static_call, hlc_get_wrapper);
@@ -114,5 +123,8 @@ on_exception:
 		hl_debug_break();
 	}
 	hl_global_free();
+#	ifdef HL_CONSOLE
+	sys_global_exit();
+#	endif
 	return 1;
 }

+ 4 - 8
src/std/date.c

@@ -20,15 +20,11 @@
  * DEALINGS IN THE SOFTWARE.
  */
 #include <hl.h>
-#include <time.h>
 
-#ifdef HL_PS
-static struct tm *localtime_r( const time_t *clock, struct tm *result ) {
-	struct tm *tt = localtime(clock);
-	if( !tt ) return NULL;
-	*result = *tt;
-	return result;
-}
+#ifdef HL_CONSOLE
+#	include <posix/posix.h>
+#else
+#	include <time.h>
 #endif
 
 #ifdef HL_WIN

+ 3 - 5
src/std/random.c

@@ -22,19 +22,17 @@
 #include <hl.h>
 #include <time.h>
 #include <string.h>
-#ifdef HL_WIN
+#if defined(HL_WIN)
 #	include <windows.h>
 #	include <process.h>
+#elif defined(HL_CONSOLE)
+#	include <posix/posix.h>
 #else
 #	include <sys/time.h>
 #	include <sys/types.h>
 #	include <unistd.h>
 #endif
 
-#ifdef HL_PS
-#define getpid() 0
-#endif
-
 #define NSEEDS	25
 #define MAX		7
 

+ 10 - 13
src/std/socket.c

@@ -34,6 +34,11 @@
 #	define SHUT_RDWR	SD_BOTH
 	typedef int _sockaddr;
 	typedef int socklen_t;
+
+#else
+
+#if defined(__ORBIS__) || defined(__NX__)
+#	include <posix/posix.h>
 #else
 #	define _GNU_SOURCE
 #	include <string.h>
@@ -44,28 +49,19 @@
 #	include <netinet/tcp.h>
 #	include <arpa/inet.h>
 #	include <unistd.h>
-#	ifdef __ORBIS__
-#	include <net.h>
-struct hostent { unsigned int *h_addr_list[1]; const char *h_name; };
-extern unsigned int inet_addr( const char *host );
-extern const char *inet_ntoa( struct in_addr addr );
-extern struct hostent *gethostbyname( const char *name );
-extern struct hostent *gethostbyaddr( const void *addr, socklen_t len, int type);
-extern int gethostname( char *name, size_t len );
-#	define errno sce_net_errno
-#	else
 #	include <netdb.h>
 #	include <poll.h>
-#	endif
 #	include <fcntl.h>
 #	include <errno.h>
 #	include <stdio.h>
+#endif
 	typedef int SOCKET;
 #	define closesocket close
 #	define SOCKET_ERROR (-1)
 #	define INVALID_SOCKET (-1)
 	typedef unsigned int _sockaddr;
 #endif
+
 #ifdef HL_LINUX
 #	include <linux/version.h>
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,44)
@@ -73,6 +69,7 @@ extern int gethostname( char *name, size_t len );
 #	define HAS_EPOLL
 #endif
 #endif
+
 #ifndef HAS_EPOLL
 #	define EPOLLIN 0x001
 #	define EPOLLOUT 0x004
@@ -187,7 +184,7 @@ HL_PRIM int hl_host_resolve( vbyte *host ) {
 	ip = inet_addr((char*)host);
 	if( ip == INADDR_NONE ) {
 		struct hostent *h;
-#	if defined(HL_WIN) || defined(HL_MAC) || defined (HL_CYGWIN) || defined(HL_PS)
+#	if defined(HL_WIN) || defined(HL_MAC) || defined (HL_CYGWIN) || defined(HL_CONSOLE)
 		h = gethostbyname((char*)host);
 #	else
 		struct hostent hbase;
@@ -210,7 +207,7 @@ HL_PRIM vbyte *hl_host_to_string( int ip ) {
 
 HL_PRIM vbyte *hl_host_reverse( int ip ) {
 	struct hostent *h;
-#	if defined(HL_WIN) || defined(HL_MAC) || defined(HL_CYGWIN) || defined(HL_PS)
+#	if defined(HL_WIN) || defined(HL_MAC) || defined(HL_CYGWIN) || defined(HL_CONSOLE)
 	h = gethostbyaddr((char *)&ip,4,AF_INET);
 #	else
 	struct hostent htmp;

+ 15 - 56
src/std/sys.c

@@ -20,6 +20,11 @@
  * DEALINGS IN THE SOFTWARE.
  */
 #include <hl.h>
+
+#ifdef HL_CONSOLE
+#	include <posix/posix.h>
+#else
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -28,7 +33,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
-#ifdef HL_WIN
+#if defined(HL_WIN)
 #	include <windows.h>
 #	include <direct.h>
 #	include <conio.h>
@@ -48,19 +53,17 @@ typedef struct _stat32 pstat;
 #	include <unistd.h>
 #	include <limits.h>
 #	include <sys/time.h>
-#ifdef HL_PS
-extern const char *ps_exe_path();
-#else
 #	include <dirent.h>
 #	include <termios.h>
 #	include <sys/times.h>
 #	include <sys/wait.h>
-#endif
 #	include <locale.h>
 #	define HL_UTF8PATH
 typedef struct stat pstat;
 #endif
 
+#endif
+
 #ifdef HL_UTF8PATH
 typedef char pchar;
 #define pstrchr strchr
@@ -108,8 +111,8 @@ HL_PRIM vbyte *hl_sys_string() {
 	return (vbyte*)USTR("BSD");
 #elif defined(HL_MAC)
 	return (vbyte*)USTR("Mac");
-#elif defined(HL_PS)
-	return (vbyte*)USTR("PS");
+#elif defined(HL_CONSOLE)
+	return (vbyte*)sys_platform_name();
 #else
 #error Unknow system string
 #endif
@@ -156,11 +159,7 @@ HL_PRIM double hl_sys_time() {
 }
 
 HL_PRIM vbyte *hl_sys_get_env( vbyte *v ) {
-#	ifdef HL_PS
-	return NULL;
-#	else
 	return (vbyte*)getenv((pchar*)v);
-#	endif
 }
 
 HL_PRIM bool hl_sys_put_env( vbyte *e, vbyte *v ) {
@@ -170,8 +169,6 @@ HL_PRIM bool hl_sys_put_env( vbyte *e, vbyte *v ) {
 	hl_buffer_char(b,'=');
 	if( v ) hl_buffer_str(b,(uchar*)v);
 	return putenv(hl_buffer_content(b,NULL)) == 0;
-#elif defined(HL_PS)
-	return false;
 #else
 	if( v == NULL ) return unsetenv((char*)e) == 0;
 	return setenv((char*)e,(char*)v,1) == 0;
@@ -190,9 +187,6 @@ extern char **environ;
 #endif
 
 HL_PRIM varray *hl_sys_env() {
-#ifdef HL_PS
-	return hl_alloc_array(&hlt_bytes,0);
-#else
 	varray *a;
 	pchar **e = environ;
 	pchar **arr;
@@ -220,7 +214,6 @@ HL_PRIM varray *hl_sys_env() {
 		e++;
 	}
 	return a;
-#endif
 }
 
 
@@ -228,8 +221,6 @@ HL_PRIM void hl_sys_sleep( double f ) {
 	hl_blocking(true);
 #if defined(HL_WIN)
 	Sleep((DWORD)(f * 1000));
-#elif defined(HL_PS)
-	// nothing
 #else
 	struct timespec t;
 	t.tv_sec = (int)f;
@@ -259,9 +250,6 @@ HL_PRIM bool hl_sys_set_time_locale( vbyte *l ) {
 
 
 HL_PRIM vbyte *hl_sys_get_cwd() {
-#	ifdef HL_PS
-	return (vbyte*)"";
-#	else
 	pchar buf[256];
 	int l;
 	if( getcwd(buf,256) == NULL )
@@ -272,15 +260,10 @@ HL_PRIM vbyte *hl_sys_get_cwd() {
 		buf[l+1] = 0;
 	}
 	return (vbyte*)pstrdup(buf,-1);
-#	endif
 }
 
 HL_PRIM bool hl_sys_set_cwd( vbyte *dir ) {
-#ifdef HL_PS
-	return false;
-#else
 	return chdir((pchar*)dir) == 0;
-#endif
 }
 
 HL_PRIM bool hl_sys_is64() {
@@ -298,8 +281,6 @@ HL_PRIM int hl_sys_command( vbyte *cmd ) {
 	ret = system((pchar*)cmd);
 	hl_blocking(false);
 	return ret;
-#elif defined(HL_PS)
-	return -1;
 #else
 	int status;
 	hl_blocking(true);
@@ -315,19 +296,11 @@ HL_PRIM bool hl_sys_exists( vbyte *path ) {
 }
 
 HL_PRIM bool hl_sys_delete( vbyte *path ) {
-#if defined(HL_PS)
-	return false;
-#else
 	return unlink((pchar*)path) == 0;
-#endif
 }
 
 HL_PRIM bool hl_sys_rename( vbyte *path, vbyte *newname ) {
-#if defined(HL_PS)
-	return false;
-#else
 	return rename((pchar*)path,(pchar*)newname) == 0;
-#endif
 }
 
 HL_PRIM varray *hl_sys_stat( vbyte *path ) {
@@ -360,19 +333,11 @@ HL_PRIM bool hl_sys_is_dir( vbyte *path ) {
 }
 
 HL_PRIM bool hl_sys_create_dir( vbyte *path, int mode ) {
-#if defined(HL_PS)
-	return false;
-#else
 	return mkdir((pchar*)path,mode) == 0;
-#endif
 }
 
 HL_PRIM bool hl_sys_remove_dir( vbyte *path ) {
-#if defined(HL_PS)
-	return false;
-#else
 	return rmdir((pchar*)path) == 0;
-#endif
 }
 
 HL_PRIM double hl_sys_cpu_time() {
@@ -383,10 +348,8 @@ HL_PRIM double hl_sys_cpu_time() {
 	if( !GetProcessTimes(GetCurrentProcess(),&unused,&unused,&stime,&utime) )
 		return 0.;
 	return ((double)(utime.dwHighDateTime+stime.dwHighDateTime)) * 65.536 * 6.5536 + (((double)utime.dwLowDateTime + (double)stime.dwLowDateTime) / 10000000);
-#elif defined(HL_PS)
-	return 0.;
 #else
-	struct tms t;
+	struct tms t = {0};
 	times(&t);
 	return ((double)(t.tms_utime + t.tms_stime)) / CLK_TCK;
 #endif
@@ -399,7 +362,7 @@ HL_PRIM double hl_sys_thread_cpu_time() {
 	if( !GetThreadTimes(GetCurrentThread(),&unused,&unused,&unused,&utime) )
 		return 0.;
 	return ((double)utime.dwHighDateTime) * 65.536 * 6.5536 + (((double)utime.dwLowDateTime) / 10000000);
-#elif defined(HL_MAC) || defined(HL_PS)
+#elif defined(HL_MAC) || defined(HL_CONSOLE)
 	hl_error("sys_thread_cpu_time not implemented on this platform");
 	return 0.;
 #else
@@ -449,8 +412,6 @@ HL_PRIM varray *hl_sys_read_dir( vbyte *_path ) {
 			break;
 	}
 	FindClose(handle);
-#elif defined(HL_PS)
-	return NULL;
 #else
 	DIR *d;
 	struct dirent *e;
@@ -530,8 +491,6 @@ HL_PRIM vbyte *hl_sys_full_path( vbyte *path ) {
 		last = i;
 	}
 	return (vbyte*)pstrdup(out,len);
-#elif defined(HL_PS)
-	return path;
 #else
 	pchar buf[PATH_MAX];
 	if( realpath((pchar*)path,buf) == NULL )
@@ -552,8 +511,8 @@ HL_PRIM vbyte *hl_sys_exe_path() {
 	if( _NSGetExecutablePath(path, &path_len) )
 		return NULL;
 	return (vbyte*)pstrdup(path,-1);
-#elif defined(HL_PS)
-	return ps_exe_path();
+#elif defined(HL_CONSOLE)
+	return (vbyte*)sys_exe_path();
 #else
 	const pchar *p = getenv("_");
 	if( p != NULL )
@@ -572,7 +531,7 @@ HL_PRIM vbyte *hl_sys_exe_path() {
 HL_PRIM int hl_sys_get_char( bool b ) {
 #	if defined(HL_WIN)
 	return b?getche():getch();
-#	elif defined(HL_PS)
+#	elif defined(HL_CONSOLE)
 	return -1;
 #	else
 	// took some time to figure out how to do that