From 84e034353138ae1d870dbc3be66dfe1d58da1e86 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Wed, 30 Mar 2011 08:49:50 +0000
Subject: [PATCH] AVATAR: executable code update

---
 executablecode/generated_src/main.c           |  2 --
 .../toexecutable/AVATAR2CPOSIX.java           | 33 +++++++++++--------
 .../toexecutable/MainFile.java                | 25 ++++++++++++--
 3 files changed, 43 insertions(+), 17 deletions(-)

diff --git a/executablecode/generated_src/main.c b/executablecode/generated_src/main.c
index 349fe13fa6..bce8999af4 100644
--- a/executablecode/generated_src/main.c
+++ b/executablecode/generated_src/main.c
@@ -9,6 +9,4 @@
 #include "debug.h"
 
 int main(int argc, char *argv[]) {
-
-
 }
\ No newline at end of file
diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
index d5bb1077c5..75cdcbb1bf 100755
--- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
+++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java
@@ -54,17 +54,7 @@ import avatartranslator.*;
 public class AVATAR2CPOSIX {
 
 	private final static String UNKNOWN = "UNKNOWN";
-
-	
-	private final static String BOOLEAN_DATA_HEADER = "(* Boolean return types *)\ndata true/0.\ndata false/0.\n";
-	private final static String FUNC_DATA_HEADER = "(* Functions data *)\ndata " + UNKNOWN + "/0.\n";
-	
-	private final static String PK_HEADER = "(* Public key cryptography *)\nfun pk/1.\nfun encrypt/2.\nreduc decrypt(encrypt(x,pk(y)),y) = x.\n";
-	private final static String SK_HEADER = "(* Symmetric key cryptography *)\nfun sencrypt/2.\nreduc sdecrypt(sencrypt(x,k),k) = x.\n";
-	private final static String MAC_HEADER = "(* MAC *)\nfun MAC/2.\nreduc verifyMAC(m, k, MAC(m, k)) = true.\n";
-	private final static String CONCAT_HEADER = "(* CONCAT *)\nfun concat/5.\nreduc get1(concat(m1, m2, m3, m4, m5))= m1.\nreduc get2(concat(m1, m2, m3, m4, m5))= m2.\nreduc get3(concat(m1, m2, m3, m4, m5))= m3.\nreduc get4(concat(m1, m2, m3, m4, m5))= m4.\nreduc get5(concat(m1, m2, m3, m4, m5))= m5.\n";
-	
-	private final static String MAIN_DEC = "int main(int argc, char *argv[]) {\n";
+	private final static String CR = "\n";
 	
 	private AvatarSpecification avspec;
 	
@@ -95,8 +85,25 @@ public class AVATAR2CPOSIX {
 	
 	public void generateCPOSIX(boolean _debug) {
 		mainFile = new MainFile("main");
-	
-	
+		
+		// Create a main mutex
+		mainFile.appendToHCode("/* Main mutex */" + CR);
+		mainFile.appendToBeforeMainCode("/* Main mutex */" + CR);
+		mainFile.appendToHCode("extern pthread_mutex_t mainMutex;" + CR + CR);
+		mainFile.appendToBeforeMainCode("pthread_mutex_t mainMutex;" + CR + CR);
+		
+		
+		// Create a synchronous channel per relation/signal
+		mainFile.appendToHCode("/* Synchronous channels */" + CR);
+		mainFile.appendToBeforeMainCode("/* Synchronous channels */" + CR);
+		for(AvatarRelation ar: avspec.getRelations()) {
+				if (!ar.isAsynchronous()) {
+					
+				}
+		}
+			
+		//mainFile.appendToHCode("pthread_mutex_t mainMutex;" + CR);
+		
 	}
 	
 }
\ No newline at end of file
diff --git a/src/avatartranslator/toexecutable/MainFile.java b/src/avatartranslator/toexecutable/MainFile.java
index fb05cdc863..daef103b13 100755
--- a/src/avatartranslator/toexecutable/MainFile.java
+++ b/src/avatartranslator/toexecutable/MainFile.java
@@ -52,6 +52,9 @@ import myutil.*;
 import avatartranslator.*;
 
 public class MainFile {
+	
+	private final static String H_DEF = "#ifndef MAIN_H\n#define MAIN_H\n";
+	private final static String H_END_DEF = "#endif\n";
 
 	private final static String INCLUDE_HEADER = "#include <stdio.h>\n#include <pthread.h>\n#include <unistd.h>\n#include <stdlib.h>\n";
 	private final static String LOCAL_INCLUDE_HEADER = "#include \"request.h\"\n#include \"syncchannel.h\"\n#include \"request_manager.h\"\n#include \"debug.h\""; 
@@ -60,23 +63,41 @@ public class MainFile {
 	private final static String CR = "\n";
 	
 	private String name;
+	private String hCode;
+	private String beforeMainCode;
+	private String mainCode;
 	
 	
 	public MainFile(String _name) {
 		name = _name;
+		hCode = "";
+		mainCode = "";
 	}
 	
 	public String getName() {
 		return name;
 	}
 	
+	public void appendToHCode(String _code) {
+		hCode += _code;
+	}
+	
+	public void appendToBeforeMainCode(String _code) {
+		beforeMainCode += _code;
+	}
+	
+	public void appendToMainCode(String _code) {
+		mainCode += _code;
+	}
+	
 	public String getHeaderCode() {
-		return "";
+		return H_DEF + hCode + H_END_DEF;
 	}
 	
 	public String getMainCode() {
 		String s = INCLUDE_HEADER + "\n" + LOCAL_INCLUDE_HEADER + CR + CR;
-		s += MAIN_DEC + CR + CR + "}" + CR;
+		s += beforeMainCode + CR;
+		s += MAIN_DEC + CR + mainCode + CR + "}" + CR;
 		
 		return s;
 		
-- 
GitLab