From 8672809590bdddb735976f8f29c17027a8503074 Mon Sep 17 00:00:00 2001
From: Sven Gestegard Robertz <sven.robertz@cs.lth.se>
Date: Sat, 25 Oct 2014 15:03:56 +0200
Subject: [PATCH] migrated example from metadata branch. commented out broken
 python encoder

---
 doc/pragma-skiss.txt                  |   6 +-
 examples/simple/compile.sh            |   4 +-
 examples/user_types/Decoder.java      |  19 ++-
 examples/user_types/Encoder.java      |  27 +++-
 examples/user_types/Makefile          | 177 +++++++++++++++++++++++++-
 examples/user_types/compile.sh        |  22 ----
 examples/user_types/example_decoder.c |  10 ++
 examples/user_types/example_encoder.c |  11 ++
 examples/user_types/run.sh            |  39 ------
 examples/user_types/test.lc           |  24 +++-
 10 files changed, 260 insertions(+), 79 deletions(-)
 delete mode 100644 examples/user_types/compile.sh
 delete mode 100644 examples/user_types/run.sh

diff --git a/doc/pragma-skiss.txt b/doc/pragma-skiss.txt
index 62b5402..1d9c14f 100644
--- a/doc/pragma-skiss.txt
+++ b/doc/pragma-skiss.txt
@@ -21,9 +21,9 @@ TODO:
 
 	my_lc_some_pragma sp;
 
-	sp.some_refs = {&labcomm_signature_my_lc_foo, 
-                        &labcomm_signature_my_lc_bar}; 
-         
+	sp.some_refs = {&labcomm_signature_my_lc_foo,
+                        &labcomm_signature_my_lc_bar};
+
  	labcomm_encode_my_lc_some_pragma(enc, &sp);
 
     This is to avoid exposing local_to_remote and remote_to_local
diff --git a/examples/simple/compile.sh b/examples/simple/compile.sh
index 113f7f2..aee346f 100644
--- a/examples/simple/compile.sh
+++ b/examples/simple/compile.sh
@@ -5,7 +5,7 @@
 (cd ../..; make all)
 
 mkdir -p gen
-java -jar ../../compiler/labComm.jar --java=gen --c=gen/simple.c --h=gen/simple.h  --python=gen/simple.py simple.lc 
+java -jar ../../compiler/labcomm_compiler.jar --java=gen --c=gen/simple.c --h=gen/simple.h  --python=gen/simple.py simple.lc 
 
 javac -cp ../../lib/java/labcomm20141009.jar:. gen/*.java Encoder.java Decoder.java
 
@@ -20,7 +20,7 @@ gcc -Wall -Werror -I . -I ../../lib/c -L../../lib/c \
 # For version 2006
 
 mkdir -p gen06
-java -jar ../../compiler/labComm.jar --ver=2006 --java=gen06 --c=gen06/simple.c --h=gen06/simple.h  --python=gen06/simple.py simple.lc 
+java -jar ../../compiler/labcomm_compiler.jar --ver=2006 --java=gen06 --c=gen06/simple.c --h=gen06/simple.h  --python=gen06/simple.py simple.lc 
 
 javac -cp ../../lib/java/labcomm2006.jar:. gen06/*.java Encoder06.java Decoder06.java
 
diff --git a/examples/user_types/Decoder.java b/examples/user_types/Decoder.java
index bdb1737..9b0c8b0 100644
--- a/examples/user_types/Decoder.java
+++ b/examples/user_types/Decoder.java
@@ -5,7 +5,7 @@ import java.io.InputStream;
 import se.lth.control.labcomm.DecoderChannel;
 
 public class Decoder
-  implements twoLines.Handler
+  implements twoLines.Handler, theint.Handler, Comment.Handler//, Typedef.Handler
 
 {
 
@@ -16,6 +16,9 @@ public class Decoder
   {
     decoder = new DecoderChannel(in);
     twoLines.register(decoder, this);
+    theint.register(decoder,this);
+    Comment.register(decoder, this);
+    //Typedef.register(decoder, this);
 
     try {
       System.out.println("Running decoder.");
@@ -39,6 +42,20 @@ public class Decoder
     System.out.println("              Line l2: "+genLine(d.l2));
   }
 
+  public void handle_theint(int d) throws java.io.IOException {
+    System.out.println("Got theint: "+d);
+  }
+
+  public void handle_Comment(Comment c) throws java.io.IOException {
+    System.out.print("Decoder got Comment: ");
+    System.out.println("id: "+c.id);
+    System.out.println("comment: "+c.comment);
+  }
+
+  //public void handle_Typedef(Typedef t) throws java.io.IOException {
+  //  System.out.print("Decoder got Typedef: ");
+  //  t.dump();
+  //}
 
   public static void main(String[] arg) throws Exception {
     Decoder example = new Decoder(
diff --git a/examples/user_types/Encoder.java b/examples/user_types/Encoder.java
index aa2f80e..cfce513 100644
--- a/examples/user_types/Encoder.java
+++ b/examples/user_types/Encoder.java
@@ -5,18 +5,31 @@ import java.io.OutputStream;
 import se.lth.control.labcomm.EncoderChannel;
 
 /**
- * Simple encoder 
+ * Simple encoder
  */
-public class Encoder 
+public class Encoder
 {
 
   EncoderChannel encoder;
 
-  public Encoder(OutputStream out) 
-    throws Exception 
+  public Encoder(OutputStream out)
+    throws Exception
   {
     encoder = new EncoderChannel(out);
     twoLines.register(encoder);
+    theint.register(encoder);
+    //LabCommEncoder.MetaDataTransaction t = encoder.beginMetaData(twoLines.class);
+    ////LabCommEncoder.MetaDataTransaction t = encoder.beginMetaData();
+    //Comment.register(t, false);
+    //Comment c = new Comment();
+    //c.id = encoder.getTypeId(twoLines.class);
+    //c.comment = "Test comment";
+    //Comment.encode(t,c);
+    //t.commit();
+    //t = encoder.beginMetaData(null);
+    //afoo.register(t, false);
+    //afoo.encode(t, new foo());
+    //t.commit();
   }
 
   public void doEncode() throws java.io.IOException {
@@ -31,7 +44,7 @@ public class Encoder
     p11.y = c11y;
 
     l1.start = p11;
-    
+
     point p12 = new point();
     coord c12x = new coord();
     coord c12y = new coord();
@@ -52,7 +65,7 @@ public class Encoder
     p21.y = c21y;
 
     l2.start = p21;
-    
+
     point p22 = new point();
     coord c22x = new coord();
     coord c22y = new coord();
@@ -74,6 +87,8 @@ public class Encoder
 
     System.out.println("Encoding theTwoLines");
     twoLines.encode(encoder, x);
+
+    theint.encode(encoder, 1337);
   }
 
 
diff --git a/examples/user_types/Makefile b/examples/user_types/Makefile
index 4d68ea9..4953342 100644
--- a/examples/user_types/Makefile
+++ b/examples/user_types/Makefile
@@ -1,7 +1,176 @@
-all:
+LCDIR=../..
+LCCJAR=${LCDIR}/compiler/labcomm_compiler.jar  # the LabComm compiler
+LCLJAR=${LCDIR}/lib/java/labcomm.jar  # the LabComm library
+
+EXECUTABLES=example_encoder example_decoder Encoder.class Decoder.class Encoder.exe Decoder.exe
+include ${LCDIR}/lib/c/os_compat.mk
+
+GENDIR=gen
+
+.PHONY: all cleanbuild clean distclean build run allall buildcs runwcs
+
+all: cleanbuild run
+
+allall: clean build buildcs runwcs
+
+###############################################
+### dependencies and parts ####################
+###############################################
+
+LCC=java -jar ${LCCJAR}
+CLASSPATH=.:${LCLJAR}
+
+${LCCJAR} :
+	$MAKE -C ${LCDIR} make-compiler
+
+${LCLJAR} :
+	$MAKE -C ${LCDIR} labcomm.jar
+
+
+cleanbuild: clean build
+
+labcomm.dll:
+	ln -sf ../../lib/csharp/labcomm.dll $@
+
+Encoder.exe: Encoder.cs gen/test.cs labcomm.dll Makefile
+	mcs -out:$@ $(filter %.cs, $^) -lib:../../lib/csharp/ -r:labcomm
+	chmod a+x $@
+
+Decoder.exe: Decoder.cs gen/test.cs labcomm.dll Makefile
+	mcs -out:$@ $(filter %.cs, $^) -lib:../../lib/csharp/ -r:labcomm
+	chmod a+x $@
+
+build : 
+	mkdir -p ${GENDIR}
+	java -jar ${LCDIR}/compiler/labcomm_compiler.jar --java=${GENDIR} --c=${GENDIR}/test.c --h=${GENDIR}/test.h  --python=${GENDIR}/test.py --cs=${GENDIR}/test.cs test.lc 
+
+	javac -cp ${LCDIR}/lib/java/labcomm.jar:. ${GENDIR}/*.java Encoder.java Decoder.java
+
+	${CC} ${CFLAGS} ${LDFLAGS} -Wall -Werror -Wno-unused-function \
+	    -I. -I${LCDIR}/lib/c -L${LCDIR}/lib/c \
+	    -o example_encoder example_encoder.c ${GENDIR}/test.c \
+	    -llabcomm20141009 
+
+	${CC} ${CFLAGS} ${LDFLAGS} -Wall -Werror -I . -I ${LCDIR}/lib/c -L${LCDIR}/lib/c \
+	    -o example_decoder example_decoder.c ${GENDIR}/test.c \
+	    -llabcomm20141009 
+
+buildcs: Encoder.exe Decoder.exe
+
+run:
+	export LD_LIBRARY_PATH=${LCDIR}/lib/c/
+	@echo
+	@echo "********************************************"
+	@echo "***   ************ running example for version 2014   ***"
+	@echo "********************************************"
+	@echo
+
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Encoder encoded_data_j
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_j
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_j
+
+	@echo "************ running python decoder (from wiki_example):"
+	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_j LabComm20141009
+
+	@echo "************ running C encoder: *****************"
+	@./example_encoder encoded_data_c
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_c
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_c
+
+	@echo "************ running python decoder (from wiki_example):"
+	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_c LabComm20141009
+
+#	@echo "************ running python encoder: *****************"
+#	@PYTHONPATH=${LCDIR}/lib/python:${GENDIR} ./example_encoder.py encoded_data_p LabComm20141009
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_p
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_p
+
+	@echo "************ running python decoder (from wiki_example):"
+	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm20141009
+
+runwcs: Encoder.exe Decoder.exe
+	export LD_LIBRARY_PATH=${LCDIR}/lib/c/
+	@echo
+	@echo "********************************************"
+	@echo "***   ************ running example for version 2014   ***"
+	@echo "********************************************"
+	@echo
+
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Encoder encoded_data_j
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_j
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_j
+
+	@echo "************ running python decoder (from wiki_example):"
+	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_j LabComm2014
+
+	@echo "************ running C# decoder: *****************"
+	@./Decoder.exe encoded_data_j
+
+	@echo "************ running C encoder: *****************"
+	@./example_encoder encoded_data_c
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_c
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_c
+
+	@echo "************ running python decoder (from wiki_example):"
+	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_c LabComm20141009
+
+	@echo "************ running C# decoder: *****************"
+	@./Decoder.exe encoded_data_c
+
+#	@echo "************ running python encoder: *****************"
+#	@PYTHONPATH=${LCDIR}/lib/python:${GENDIR} ./example_encoder.py encoded_data_p LabComm20141009
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_p
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_p
+
+	@echo "************ running python decoder (from wiki_example):"
+	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm20141009
+
+	@echo "************ running C# decoder: *****************"
+	@./Decoder.exe encoded_data_p
+
+	@echo "************ running C# encoder: *****************"
+	@./Encoder.exe encoded_data_cs
+
+	@echo "************ running Java  decoder: *****************"
+	@java -cp .:${LCDIR}/lib/java/labcomm.jar:${GENDIR} Decoder encoded_data_cs
+
+	@echo "************ running C decoder: *****************"
+	@./example_decoder encoded_data_cs
+
+	@echo "************ running python decoder (from wiki_example):"
+	@PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_cs LabComm20141009
+
+	@echo "************ running C# decoder: *****************"
+	@./Decoder.exe encoded_data_cs
+
+
 
 clean:
+	rm -rf ${GENDIR}
 
-distclean:
-	rm -rf gen
-	rm -f encoded_data
+distclean: clean
+	rm -f ${EXECUTABLES}
diff --git a/examples/user_types/compile.sh b/examples/user_types/compile.sh
deleted file mode 100644
index 3daee1b..0000000
--- a/examples/user_types/compile.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-### Example compile script, showing the steps required to build a labcomm application
-### (including compiler and libs).
-
-# For current version (2013)
-(cd ../..; make all)
-
-mkdir -p gen
-java -jar ../../compiler/labComm.jar --java=gen --c=gen/test.c --h=gen/test.h  --python=gen/test.py test.lc 
-
-javac -cp ../../lib/java/labcomm20141009.jar:. gen/*.java Encoder.java Decoder.java
-
-# for macOS, add     -DLABCOMM_COMPAT=\"labcomm_compat_osx.h\" \
-gcc -Wall -Werror -Wno-unused-function \
-    -I. -I../../lib/c -L../../lib/c \
-    -o example_encoder example_encoder.c gen/test.c \
-    -llabcomm20141009 
-
-gcc -Wall -Werror -I . -I ../../lib/c -L../../lib/c \
-    -o example_decoder example_decoder.c gen/test.c \
-    -llabcomm20141009 
-    #-Tlabcomm.linkscript
-
diff --git a/examples/user_types/example_decoder.c b/examples/user_types/example_decoder.c
index 1edc52f..7b89461 100644
--- a/examples/user_types/example_decoder.c
+++ b/examples/user_types/example_decoder.c
@@ -15,6 +15,14 @@ static void handle_test_twoLines(test_twoLines *v,void *context) {
                                                                      v->l2.end.x.val, v->l2.end.y.val);    
 }
 
+static void handle_test_theint(test_theint *v,void *context) {
+  printf("Got theint. %d\n", *v); 
+}
+
+static void handle_test_Comment(test_Comment *v,void *context) {
+  printf("Got comment (0x%x): %s\n", v->id, v->comment);
+}
+
 int main(int argc, char *argv[]) {
   int fd;
   struct labcomm_decoder *decoder;
@@ -34,6 +42,8 @@ int main(int argc, char *argv[]) {
   }
 
   labcomm_decoder_register_test_twoLines(decoder, handle_test_twoLines, context);
+  labcomm_decoder_register_test_theint(decoder, handle_test_theint, context);
+  labcomm_decoder_register_test_Comment(decoder, handle_test_Comment, context);
 
   printf("Decoding:\n");
   labcomm_decoder_run(decoder);
diff --git a/examples/user_types/example_encoder.c b/examples/user_types/example_encoder.c
index 3c76dcd..fb8f97a 100644
--- a/examples/user_types/example_encoder.c
+++ b/examples/user_types/example_encoder.c
@@ -8,6 +8,7 @@
 #include "gen/test.h"
 #include <stdio.h>
 
+extern struct labcomm_signature labcomm_signature_test_twoLines;
 int main(int argc, char *argv[]) {
   int fd;
   struct labcomm_encoder *encoder;
@@ -22,6 +23,16 @@ int main(int argc, char *argv[]) {
 				labcomm_default_scheduler);
   labcomm_encoder_register_test_twoLines(encoder);
 
+#ifdef OLD_METADATA
+  struct labcomm_encoder *mdt = labcomm_metadata_begin(encoder,
+		  &labcomm_signature_test_twoLines);
+  labcomm_encoder_register_test_Comment(mdt);
+  test_Comment comment;
+  comment.id = 17;
+  comment.comment = "This is a metadata comment...";
+  labcomm_encode_test_Comment(mdt, &comment);
+  labcomm_metadata_end(mdt);
+#endif
   test_twoLines tl;
 
   tl.l1.start.x.val = 11;
diff --git a/examples/user_types/run.sh b/examples/user_types/run.sh
deleted file mode 100644
index 1b791ec..0000000
--- a/examples/user_types/run.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-export LD_LIBRARY_PATH=../../lib/c/
-echo
-echo "********************************************"
-echo "***   Running example for version 2013   ***"
-echo "********************************************"
-echo
-
-java -cp .:../../lib/java/labcomm20141009.jar:gen Encoder encoded_data
-
-echo "running Java  decoder:"
-java -cp .:../../lib/java/labcomm20141009.jar:gen Decoder encoded_data
-
-echo "running C decoder:"
-./example_decoder encoded_data
-
-echo "running python decoder (from wiki_example):"
-PYTHONPATH=../../lib/python ../wiki_example/example_decoder.py encoded_data LabComm20141009
-
-echo "running C encoder:"
-./example_encoder encoded_data
-
-echo "running Java  decoder:"
-java -cp .:../../lib/java/labcomm20141009.jar:gen Decoder encoded_data
-
-echo "running C decoder:"
-./example_decoder encoded_data
-
-echo "running python decoder (from wiki_example):"
-PYTHONPATH=../../lib/python ../wiki_example/example_decoder.py encoded_data LabComm20141009
-
-echo "running python encoder:"
-PYTHONPATH=../../lib/python:gen ./example_encoder.py encoded_data2
-
-echo "running Java  decoder:"
-java -cp .:../../lib/java/labcomm20141009.jar:gen Decoder encoded_data2
-
-echo "running C decoder:"
-./example_decoder encoded_data2
-
diff --git a/examples/user_types/test.lc b/examples/user_types/test.lc
index d222539..df38394 100644
--- a/examples/user_types/test.lc
+++ b/examples/user_types/test.lc
@@ -12,14 +12,34 @@ typedef struct {
   point end;
 } line;
 
+typedef int anint;
+
 typedef struct {
-  int a;
-  int b;
+  anint a;
+  anint b;
   boolean c;
 } foo;
 
+sample anint theint;
+
 sample struct {
   line l1;
   line l2;
   foo  f;
 } twoLines;
+
+sample line fixedLineArray[2];
+
+sample line varLineArray[_];
+
+sample struct {
+  int x;
+  int y;
+} structArray[2];
+
+sample struct {
+  int id;
+  string comment;
+} Comment;   // For use in metadata
+
+sample foo afoo; // to test unregistered metadata
-- 
GitLab