diff --git a/executablecode/generated_src/main.c b/executablecode/generated_src/main.c index 349fe13fa693f05a2aea4a23f13cb0090e81b01f..bce8999af4f6974ca087f2adf5d623f9e7be3a9b 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 d5bb1077c597d7b02682ea51351186df23265af9..75cdcbb1bfd6ef88bdf3bce992b63f5b1d3391f5 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 fb05cdc863de4bf5fb43ceb323fea441e3a6e803..daef103b13568c49ce49cb031e3ee44ab95ee15b 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;