Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.37 KB | None | 0 0
  1. #include "acc.h"
  2. #include <ctype.h>
  3. #include <stdarg.h>
  4. #include <stdint.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #if defined(__arm__)
  10. #include <unistd.h>
  11. #endif
  12.  
  13.  
  14. /*const char* text = "void op_int(int a);\n"
  15.     "void op_float12(float a, float b, float c, float d,\n"
  16.     "           float e, float f, float g, float h,\n"
  17.     "           float i, float j, float k, float l);\n"
  18.     "void script() {\n"
  19.     "  globalVar += 3;\n"
  20.     "  op_int(123);\n"
  21.     "  op_float12(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0);\n"
  22.     "}\n";*/
  23.    
  24. int globalVar = 0;
  25.    
  26. typedef void (*ScriptPtr)();   
  27.    
  28. const char* text =
  29.    "void script() {\n"
  30.     "  globalVar += 3;\n"  
  31.     "}\n";
  32.  
  33. ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name) {    
  34.     if (strcmp("globalVar", name) == 0) {
  35.         return (ACCvoid*) &globalVar;
  36.     }
  37.     return 0;//(ACCvoid*) dlsym(RTLD_DEFAULT, name);
  38. }
  39.  
  40. int main(int argc, char** argv) {
  41.     ACCscript* script = accCreateScript();
  42.  
  43.     accRegisterSymbolCallback(script, symbolLookup, NULL);
  44.  
  45.     const ACCchar* scriptSource[] = {text};
  46.     accScriptSource(script, 1, scriptSource, NULL);
  47.  
  48.     accCompileScript(script);
  49.     int result = accGetError(script);
  50.     ScriptPtr scriptPointer = 0;
  51.     if (result != 0) {
  52.         char buf[1024];
  53.         accGetScriptInfoLog(script, sizeof(buf), NULL, buf);
  54.         fprintf(stderr, "%s", buf);
  55.         goto exit;
  56.     }
  57.  
  58.     {
  59.         ACCsizei numPragmaStrings;
  60.         accGetPragmas(script, &numPragmaStrings, 0, NULL);
  61.         if (numPragmaStrings) {
  62.             char** strings = new char*[numPragmaStrings];
  63.             accGetPragmas(script, NULL, numPragmaStrings, strings);
  64.             for(ACCsizei i = 0; i < numPragmaStrings; i += 2) {
  65.                 fprintf(stderr, "#pragma %s(%s)\n", strings[i], strings[i+1]);
  66.             }
  67.             delete[] strings;
  68.         }
  69.     }
  70.  
  71.     accGetScriptLabel(script, "script", (ACCvoid**) & scriptPointer);
  72.  
  73.     result = accGetError(script);
  74.     if (result != ACC_NO_ERROR) {
  75.         fprintf(stderr, "Could not find script: %d\n", result);
  76.     } else {
  77.         fprintf(stderr, "Executing script:\n");
  78.         globalVar = 17;
  79.         (*scriptPointer)();
  80.         fprintf(stderr, "After script globalVar = %d\n", globalVar);
  81.     }
  82.  
  83.  
  84. exit:
  85.  
  86.     accDeleteScript(script);
  87.  
  88.     return result;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement