Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sven Gestegård Robertz
LabComm
Commits
4427041c
Commit
4427041c
authored
Mar 05, 2013
by
Oscar Olsson
Browse files
Merge on error, new datatype callback and mem leak fix
parents
321cc67d
9ff9e3c2
Changes
23
Hide whitespace changes
Inline
Side-by-side
compiler/C_CodeGen.jrag
View file @
4427041c
...
@@ -496,7 +496,8 @@ aspect C_Decoder {
...
@@ -496,7 +496,8 @@ aspect C_Decoder {
}
}
public void VariableSize.C_emitDecoderDecodeLimit(C_env env, int i) {
public void VariableSize.C_emitDecoderDecodeLimit(C_env env, int i) {
env.println(env.qualid + ".n_" + i + " = labcomm_decode_int(d);");
//env.println(env.qualid + ".n_" + i + " = labcomm_decode_int(d);");
env.println(env.qualid + ".n_" + i + " = labcomm_decode_packed32(d);");
}
}
public void ArrayType.C_emitDecoderDecodeLimit(C_env env) {
public void ArrayType.C_emitDecoderDecodeLimit(C_env env) {
...
@@ -721,7 +722,8 @@ aspect C_Encoder {
...
@@ -721,7 +722,8 @@ aspect C_Encoder {
}
}
public void VariableSize.C_emitEncoderEncodeLimit(C_env env, int i) {
public void VariableSize.C_emitEncoderEncodeLimit(C_env env, int i) {
env.println("labcomm_encode_int(e, " + env.qualid + ".n_" + i + ");");
//env.println("labcomm_encode_int(e, " + env.qualid + ".n_" + i + ");");
env.println("labcomm_encode_packed32(e, " + env.qualid + ".n_" + i + ");");
}
}
public void ArrayType.C_emitEncoderEncodeLimit(C_env env) {
public void ArrayType.C_emitEncoderEncodeLimit(C_env env) {
...
...
compiler/Java_CodeGen.jrag
View file @
4427041c
...
@@ -578,7 +578,7 @@ aspect Java_Class {
...
@@ -578,7 +578,7 @@ aspect Java_Class {
}
}
public void VariableSize.Java_emitDecoder(Java_env env) {
public void VariableSize.Java_emitDecoder(Java_env env) {
env.print("d.decode
Int
()");
env.print("d.decode
Packed32
()");
}
}
public void StructType.Java_emitDecoder(Java_env env, String name) {
public void StructType.Java_emitDecoder(Java_env env, String name) {
...
...
compiler/Signature.jrag
View file @
4427041c
...
@@ -38,11 +38,27 @@ aspect Signature {
...
@@ -38,11 +38,27 @@ aspect Signature {
}
}
public void addInt(int value, String comment) {
public void addInt(int value, String comment) {
byte[] data = new byte[4];
byte[] packed = new byte[5];
for (int i = 0 ; i < 4 ; i++) {
data[3 - i] = (byte)((value >> (8 * i)) & 0xff);
// System.out.println("addInt: "+value);
}
int tmp = value;
add(data, comment);
int len = 0;
while( tmp >= 0x80 ) {
packed[len] = (byte) ((tmp & 0x7f) | 0x80 ) ;
tmp >>>= 7;
len++;
}
packed[len] = (byte) (tmp & 0x7f);
// System.out.println("packed: "+packed[len]+ "len = "+len);
add(java.util.Arrays.copyOf(packed, len+1), comment);
// byte[] data = new byte[4];
// for (int i = 0 ; i < 4 ; i++) {
// data[3 - i] = (byte)((value >> (8 * i)) & 0xff);
// }
// add(data, comment);
}
}
public void addString(String value, String comment) {
public void addString(String value, String comment) {
...
@@ -196,4 +212,4 @@ aspect Signature {
...
@@ -196,4 +212,4 @@ aspect Signature {
return "_";
return "_";
}
}
}
}
\ No newline at end of file
examples/simple/Decoder.java
View file @
4427041c
...
@@ -5,7 +5,7 @@ import java.io.InputStream;
...
@@ -5,7 +5,7 @@ import java.io.InputStream;
import
se.lth.control.labcomm.LabCommDecoderChannel
;
import
se.lth.control.labcomm.LabCommDecoderChannel
;
public
class
Decoder
public
class
Decoder
implements
TwoInts
.
Handler
,
IntString
.
Handler
implements
TwoInts
.
Handler
,
IntString
.
Handler
,
TwoArrays
.
Handler
{
{
LabCommDecoderChannel
decoder
;
LabCommDecoderChannel
decoder
;
...
@@ -16,6 +16,7 @@ public class Decoder
...
@@ -16,6 +16,7 @@ public class Decoder
decoder
=
new
LabCommDecoderChannel
(
in
);
decoder
=
new
LabCommDecoderChannel
(
in
);
TwoInts
.
register
(
decoder
,
this
);
TwoInts
.
register
(
decoder
,
this
);
IntString
.
register
(
decoder
,
this
);
IntString
.
register
(
decoder
,
this
);
TwoArrays
.
register
(
decoder
,
this
);
try
{
try
{
System
.
out
.
println
(
"Running decoder."
);
System
.
out
.
println
(
"Running decoder."
);
...
@@ -33,6 +34,18 @@ public class Decoder
...
@@ -33,6 +34,18 @@ public class Decoder
System
.
out
.
println
(
"Got IntString, x="
+
d
.
x
+
", s="
+
d
.
s
);
System
.
out
.
println
(
"Got IntString, x="
+
d
.
x
+
", s="
+
d
.
s
);
}
}
public
void
handle_TwoArrays
(
TwoArrays
d
)
throws
java
.
io
.
IOException
{
System
.
out
.
println
(
"Got TwoArrays:"
);
for
(
int
i
=
0
;
i
<
d
.
fixed
.
length
;
i
++)
{
System
.
out
.
print
(
d
.
fixed
[
i
]+
" "
);
}
System
.
out
.
println
();
for
(
int
i
=
0
;
i
<
d
.
variable
[
0
].
length
;
i
++)
{
System
.
out
.
print
(
d
.
variable
[
0
][
i
]+
" "
);
System
.
out
.
print
(
d
.
variable
[
1
][
i
]+
" "
);
}
System
.
out
.
println
();
}
public
static
void
main
(
String
[]
arg
)
throws
Exception
{
public
static
void
main
(
String
[]
arg
)
throws
Exception
{
Decoder
example
=
new
Decoder
(
Decoder
example
=
new
Decoder
(
...
...
examples/simple/example_decoder.c
View file @
4427041c
...
@@ -12,6 +12,20 @@ static void handle_simple_IntString(simple_IntString *v,void *context) {
...
@@ -12,6 +12,20 @@ static void handle_simple_IntString(simple_IntString *v,void *context) {
printf
(
"Got IntString. x=%d, s=%s
\n
"
,
v
->
x
,
v
->
s
);
printf
(
"Got IntString. x=%d, s=%s
\n
"
,
v
->
x
,
v
->
s
);
}
}
static
void
handle_simple_TwoArrays
(
simple_TwoArrays
*
d
,
void
*
context
)
{
printf
(
"Got TwoArrays:"
);
int
i
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
printf
(
"%d "
,
d
->
fixed
.
a
[
i
]);
}
printf
(
"
\n
"
);
for
(
i
=
0
;
i
<
d
->
variable
.
n_1
;
i
++
)
{
printf
(
"%d "
,
d
->
variable
.
a
[
0
+
2
*
i
]);
printf
(
"%d "
,
d
->
variable
.
a
[
1
+
2
*
i
]);
}
printf
(
"
\n
"
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
main
(
int
argc
,
char
*
argv
[])
{
int
fd
;
int
fd
;
struct
labcomm_decoder
*
decoder
;
struct
labcomm_decoder
*
decoder
;
...
@@ -29,6 +43,7 @@ int main(int argc, char *argv[]) {
...
@@ -29,6 +43,7 @@ int main(int argc, char *argv[]) {
labcomm_decoder_register_simple_TwoInts
(
decoder
,
handle_simple_TwoInts
,
context
);
labcomm_decoder_register_simple_TwoInts
(
decoder
,
handle_simple_TwoInts
,
context
);
labcomm_decoder_register_simple_IntString
(
decoder
,
handle_simple_IntString
,
context
);
labcomm_decoder_register_simple_IntString
(
decoder
,
handle_simple_IntString
,
context
);
labcomm_decoder_register_simple_TwoArrays
(
decoder
,
handle_simple_TwoArrays
,
context
);
printf
(
"Decoding:
\n
"
);
printf
(
"Decoding:
\n
"
);
labcomm_decoder_run
(
decoder
);
labcomm_decoder_run
(
decoder
);
...
...
examples/simple/example_encoder.c
View file @
4427041c
...
@@ -15,6 +15,7 @@ int main(int argc, char *argv[]) {
...
@@ -15,6 +15,7 @@ int main(int argc, char *argv[]) {
encoder
=
labcomm_encoder_new
(
labcomm_fd_writer
,
&
fd
);
encoder
=
labcomm_encoder_new
(
labcomm_fd_writer
,
&
fd
);
labcomm_encoder_register_simple_TwoInts
(
encoder
);
labcomm_encoder_register_simple_TwoInts
(
encoder
);
labcomm_encoder_register_simple_IntString
(
encoder
);
labcomm_encoder_register_simple_IntString
(
encoder
);
labcomm_encoder_register_simple_TwoArrays
(
encoder
);
simple_IntString
is
;
simple_IntString
is
;
is
.
x
=
24
;
is
.
x
=
24
;
is
.
s
=
"Hello, LabComm!"
;
is
.
s
=
"Hello, LabComm!"
;
...
@@ -26,4 +27,27 @@ int main(int argc, char *argv[]) {
...
@@ -26,4 +27,27 @@ int main(int argc, char *argv[]) {
ti
.
b
=
37
;
ti
.
b
=
37
;
printf
(
"Encoding TwoInts, a=%d, b=%d
\n
"
,
ti
.
a
,
ti
.
b
);
printf
(
"Encoding TwoInts, a=%d, b=%d
\n
"
,
ti
.
a
,
ti
.
b
);
labcomm_encode_simple_TwoInts
(
encoder
,
&
ti
);
labcomm_encode_simple_TwoInts
(
encoder
,
&
ti
);
int
foo
[
20
];
simple_TwoArrays
ta
;
ta
.
fixed
.
a
[
0
]
=
17
;
ta
.
fixed
.
a
[
1
]
=
42
;
ta
.
variable
.
n_1
=
10
;
ta
.
variable
.
a
=
foo
;
int
k
;
for
(
k
=
0
;
k
<
20
;
k
++
)
{
foo
[
k
]
=
k
;
}
printf
(
"Encoding TwoArrays...
\n
"
);
labcomm_encode_simple_TwoArrays
(
encoder
,
&
ta
);
ti
.
a
=
23
;
ti
.
b
=
47
;
printf
(
"Encoding TwoInts, a=%d, b=%d
\n
"
,
ti
.
a
,
ti
.
b
);
labcomm_encode_simple_TwoInts
(
encoder
,
&
ti
);
}
}
examples/simple/simple.lc
View file @
4427041c
...
@@ -12,3 +12,8 @@ sample struct {
...
@@ -12,3 +12,8 @@ sample struct {
double x;
double x;
double y;
double y;
} TwoDoubles;
} TwoDoubles;
sample struct {
int fixed[2];
int variable[2,_];
} TwoArrays;
lib/c/experimental/labcomm_parser.c
0 → 100644
View file @
4427041c
/* labcomm_parser.c:
* an example parser for labcomm signatures, illustrating how to skip samples
* based on their signature. Intended as an embryo for introducing this
* functionality into the lib to allow a channel to survive types with no
* registered handler.
*/
#include
<stdlib.h>
#include
<stdio.h>
#include
<string.h>
#define DEBUG
#define FALSE 0
#define TRUE 1
#define USER_ID_BASE 0x00000080
typedef
enum
{
TYPE_DECL
=
0x00000001
,
SAMPLE_DECL
=
0x00000002
,
ARRAY_DECL
=
0x00000010
,
STRUCT_DECL
=
0x00000011
,
TYPE_BOOLEAN
=
0x00000020
,
TYPE_BYTE
=
0x00000021
,
TYPE_SHORT
=
0x00000022
,
TYPE_INTEGER
=
0x00000023
,
TYPE_LONG
=
0x00000024
,
TYPE_FLOAT
=
0x00000025
,
TYPE_DOUBLE
=
0x00000026
,
TYPE_STRING
=
0x00000027
}
labcomm_type
;
void
error
(
char
*
s
)
{
fprintf
(
stderr
,
"%s"
,
s
);
fprintf
(
stderr
,
"
\n
exiting
\n
"
);
exit
(
1
);
}
#define BUF_SIZE 1024
#define STACK_SIZE 16
/* internal type: stack for the parser */
typedef
struct
{
unsigned
char
*
c
;
unsigned
int
size
;
unsigned
int
capacity
;
unsigned
int
idx
;
unsigned
int
*
stack
;
unsigned
int
top
;
}
buffer
;
/* aux method for reading a big endian uint32 from a char* (i.e. ntohl but for explicit char*) */
static
int
unpack32
(
unsigned
char
*
c
,
unsigned
int
idx
)
{
unsigned
int
b0
=
(
c
[
idx
])
<<
3
;
unsigned
int
b1
=
(
c
[
idx
+
1
])
<<
2
;
unsigned
int
b2
=
(
c
[
idx
+
2
])
<<
1
;
unsigned
int
b3
=
c
[
idx
+
3
];
return
b0
|
b1
|
b2
|
b3
;
}
void
dumpStack
(
buffer
*
b
)
{
#ifdef DEBUG
int
i
;
printf
(
"=== stack: "
);
for
(
i
=
0
;
i
<
STACK_SIZE
;
i
++
)
{
//HERE BE DRAGONS
printf
(
"%2.2x "
,
b
->
stack
[
i
]);
}
printf
(
" top==%d
\n
"
,
b
->
top
);
#endif
}
void
push
(
buffer
*
b
,
unsigned
int
e
)
{
b
->
stack
[
b
->
top
]
=
e
;
b
->
top
=
b
->
top
-
1
;
dumpStack
(
b
);
}
unsigned
int
pop
(
buffer
*
b
)
{
b
->
top
=
b
->
top
+
1
;
return
b
->
stack
[
b
->
top
];
}
int
init_buffer
(
buffer
*
b
,
size_t
size
,
size_t
stacksize
)
{
b
->
c
=
malloc
(
size
);
b
->
capacity
=
size
;
b
->
idx
=
0
;
b
->
stack
=
calloc
(
stacksize
,
sizeof
(
b
->
stack
));
b
->
top
=
stacksize
-
1
;
return
b
->
c
==
NULL
||
b
->
stack
==
NULL
;
}
int
more
(
buffer
*
b
)
{
return
b
->
idx
<
b
->
size
;
}
unsigned
char
get
(
buffer
*
b
)
{
return
b
->
c
[
b
->
idx
++
];
}
unsigned
char
peek
(
buffer
*
b
)
{
return
b
->
c
[
b
->
idx
];
}
void
advance
(
buffer
*
b
)
{
b
->
idx
++
;
}
void
advancen
(
buffer
*
b
,
size_t
n
)
{
b
->
idx
+=
n
;
}
unsigned
int
peek32
(
buffer
*
b
)
{
return
unpack32
(
b
->
c
,
b
->
idx
);
}
void
advance32
(
buffer
*
b
)
{
b
->
idx
+=
4
;
}
unsigned
int
get32
(
buffer
*
b
)
{
unsigned
int
res
=
peek32
(
b
);
advance32
(
b
);
return
res
;
}
void
getStr
(
buffer
*
b
,
char
*
dest
,
size_t
size
)
{
int
rem
=
b
->
size
-
b
->
idx
;
if
(
size
>
rem
)
size
=
rem
;
strncpy
(
dest
,
&
b
->
c
[
b
->
idx
],
size
);
b
->
idx
+=
size
;
}
//XXX experimental
#define MAX_SIGNATURES 10
#define MAX_NAME_LEN 32
#define MAX_SIG_LEN 128
unsigned
int
signatures_length
[
MAX_SIGNATURES
];
unsigned
char
signatures_name
[
MAX_SIGNATURES
][
MAX_NAME_LEN
];
//HERE BE DRAGONS: add range checks
unsigned
char
signatures
[
MAX_SIGNATURES
][
MAX_SIG_LEN
];
unsigned
int
get_signature_len
(
unsigned
int
uid
){
return
signatures_length
[
uid
-
USER_ID_BASE
];
}
unsigned
char
*
get_signature_name
(
unsigned
int
uid
){
return
&
signatures_name
[
uid
-
USER_ID_BASE
][
1
];
}
unsigned
char
*
get_signature
(
unsigned
int
uid
){
return
signatures
[
uid
-
USER_ID_BASE
];
}
void
dump_signature
(
unsigned
int
uid
){
int
i
;
unsigned
int
len
=
get_signature_len
(
uid
);
printf
(
"signature for uid %x : %s (len=%d):
\n
"
,
uid
,
get_signature_name
(
uid
),
len
);
unsigned
char
*
sig
=
get_signature
(
uid
);
for
(
i
=
0
;
i
<
len
;
i
++
)
{
printf
(
"%2.2x "
,
sig
[
i
]);
if
(
(
i
+
1
)
%
8
==
0
)
printf
(
"
\n
"
);
}
printf
(
"
\n
"
);
}
int
labcomm_sizeof
(
unsigned
int
type
)
{
switch
(
type
)
{
case
TYPE_BOOLEAN
:
case
TYPE_BYTE
:
return
1
;
case
TYPE_SHORT
:
return
2
;
case
TYPE_INTEGER
:
case
TYPE_FLOAT
:
return
4
;
case
TYPE_LONG
:
case
TYPE_DOUBLE
:
return
8
;
default:
printf
(
"labcomm_sizeof(%x)
\n
"
,
type
);
error
(
"labcomm_sizeof should only be called for primitive types"
);
}
}
int
accept_packet
(
buffer
*
d
);
int
accept_type_decl
(
buffer
*
d
);
int
accept_sample_decl
(
buffer
*
d
);
int
accept_user_id
(
buffer
*
d
);
int
accept_string
(
buffer
*
d
);
int
accept_string_length
(
buffer
*
d
);
int
accept_char
(
buffer
*
d
);
int
accept_type
(
buffer
*
d
);
int
accept_basic_type
(
buffer
*
d
);
int
accept_boolean_type
(
buffer
*
d
);
int
accept_byte_type
(
buffer
*
d
);
int
accept_short_type
(
buffer
*
d
);
int
accept_integer_type
(
buffer
*
d
);
int
accept_long_type
(
buffer
*
d
);
int
accept_float_type
(
buffer
*
d
);
int
accept_long_type
(
buffer
*
d
);
int
accept_string_type
(
buffer
*
d
);
int
accept_array_decl
(
buffer
*
d
);
int
accept_number_of_indices
(
buffer
*
d
);
int
accept_indices
(
buffer
*
d
);
int
accept_variable_index
(
buffer
*
d
);
int
accept_fixed_index
(
buffer
*
d
);
int
accept_struct_decl
(
buffer
*
d
);
int
accept_number_of_fields
(
buffer
*
d
);
int
accept_field
(
buffer
*
d
);
int
accept_sample_data
(
buffer
*
d
);
int
accept_packed_sample_data
(
buffer
*
d
);
int
read_file
(
FILE
*
f
,
buffer
*
b
)
{
int
s
=
fread
(
b
->
c
,
sizeof
(
char
),
b
->
capacity
,
f
);
b
->
size
=
s
;
b
->
idx
=
0
;
return
s
;
}
void
test_read
(
buffer
*
buf
)
{
int
r
=
read_file
(
stdin
,
buf
);
printf
(
"read %d bytes:
\n\n
"
,
r
);
int
i
;
for
(
i
=
0
;
i
<
r
;
i
++
)
{
printf
(
"%x "
,
buf
->
c
[
i
]);
if
(
i
%
8
==
7
)
printf
(
"
\n
"
);
}
printf
(
"
\n
"
);
}
int
main
()
{
buffer
buf
;
if
(
init_buffer
(
&
buf
,
BUF_SIZE
,
STACK_SIZE
)
)
{
printf
(
"failed to init buffer
\n
"
);
exit
(
1
);
}
test_read
(
&
buf
);
do
{
printf
(
"trying to read another packet
\n
"
);
}
while
(
more
(
&
buf
)
&&
accept_packet
(
&
buf
));
printf
(
"done
\n
"
);
}
int
accept_packet
(
buffer
*
d
)
{
if
(
accept_type_decl
(
d
))
{
printf
(
"*** got type decl
\n
"
);
}
else
if
(
accept_sample_decl
(
d
))
{
printf
(
"*** got sample decl
\n
"
);
}
else
if
(
accept_sample_data
(
d
))
{
printf
(
"*** got sample data
\n
"
);
}
else
{
// error("unexpected %x, expecting packet", d->c[d->idx]);
error
(
"packet"
);
}
}
int
accept_type_decl
(
buffer
*
d
){
unsigned
int
type
=
peek32
(
d
)
;
if
(
type
==
TYPE_DECL
)
{
advance32
(
d
);
accept_user_id
(
d
);
unsigned
int
uid
=
pop
(
d
);
accept_string
(
d
);
// ignore, for now. This should do something as
// char *name = (char*) pop(d);
// store or print name
// free(name)
accept_type
(
d
);
unsigned
int
type
=
pop
(
d
);
//push(d, type);
return
TRUE
;
}
else
{
return
FALSE
;
}
}
int
accept_sample_decl
(
buffer
*
d
){
unsigned
int
type
=
peek32
(
d
)
;
if
(
type
==
SAMPLE_DECL
)
{
advance32
(
d
);
accept_user_id
(
d
);
unsigned
int
nstart
=
d
->
idx
;
unsigned
int
uid
=
pop
(
d
);
accept_string
(
d
);
unsigned
int
start
=
d
->
idx
;
unsigned
int
nlen
=
pop
(
d
);
accept_type
(
d
);
unsigned
int
dt
=
pop
(
d
);
unsigned
int
end
=
d
->
idx
;
unsigned
int
len
=
end
-
start
;
if
(
len
<=
MAX_SIG_LEN
)
{
signatures_length
[
uid
-
USER_ID_BASE
]
=
len
;
memcpy
(
signatures_name
[
uid
-
USER_ID_BASE
],
&
d
->
c
[
nstart
+
3
],
nlen
+
1
);
}
else
{
error
(
"sig longer than max length (this ought to be dynamic...)"
);
}
if
(
nlen
<
MAX_NAME_LEN
)
{
// reserve space for terminating NULL
signatures_name
[
uid
-
USER_ID_BASE
][
nlen
+
1
]
=
0
;
memcpy
(
signatures
[
uid
-
USER_ID_BASE
],
&
d
->
c
[
start
],
len
);
}
else
{
error
(
"sig name longer than max length (this ought to be dynamic..."
);
}
printf
(
"signature for uid %x: %s (start=%x,end=%x, nlen=%d,len=%d)
\n
"
,
uid
,
get_signature_name
(
uid
),
start
,
end
,
nlen
,
len
);
return
TRUE
;
}
else
{
return
FALSE
;
}
}
int
accept_user_id
(
buffer
*
d
){
unsigned
int
uid
=
peek32
(
d
);
if
(
uid
>=
USER_ID_BASE
)
{
push
(
d
,
uid
);
advance32
(
d
);
//printf("uid = %x\n", uid);
return
TRUE
;
}
else
{
return
FALSE
;
}
}
int
accept_string
(
buffer
*
d
){
unsigned
int
len
=
get32
(
d
);
push
(
d
,
len
);
char
*
str
=
malloc
(
len
);
getStr
(
d
,
str
,
len
);
printf
(
"%s
\n
"
,
str
);
#ifdef RETURN_STRINGS
push
(
d
,
str
);
#else
free
(
str
);
#endif
return
TRUE
;
}
// included above
// int accept_string_length(buffer *d){
// unsigned int uid = get32(d);
// return TRUE;
//}
//int accept_char(buffer *d){
//}
int
accept_type
(
buffer
*
d
){
if
(
accept_basic_type
(
d
))
{
}
else
if
(
accept_user_id
(
d
))
{
//printf("user_id \n");
}
else
if
(
accept_array_decl
(
d
))
{
//printf("array_decl \n");
}
else
if
(
accept_struct_decl
(
d
))
{
//printf("struct_decl \n");
}
else
{
return
FALSE
;
}
}
int
accept_basic_type
(
buffer
*
d
){
unsigned
int
type
=
peek32
(
d
);
switch
(
type
)
{
case
TYPE_BOOLEAN
:
//printf("boolean \n");
break
;
case
TYPE_BYTE
:
//printf("byte \n");
break
;
case
TYPE_SHORT
:
//printf("short \n");
break
;
case
TYPE_INTEGER
:
//printf("integer \n");
break
;
case
TYPE_LONG
:
//printf("long \n");
break
;
case
TYPE_FLOAT
:
//printf("float \n");
break
;