Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. /* xct myfunction */
  2. if(!LLX_Next()) {
  3. Print("Which script function should I execute?");
  4. return;
  5. };
  6.  
  7. var int fnc; fnc = MEM_FindParserSymbol(LLX_Tok);
  8. if (fnc == -1) {
  9. Print("Function not found");
  10. return;
  11. };
  12. var int ret;
  13. var zCPar_Symbol sym;
  14. MEM_AssignInst (sym, MEM_ReadIntArray (contentSymbolTableAddress, symbID));
  15.  
  16. ret = (sym.offset==zPAR_TYPE_STRING);
  17.  
  18. msg = ConcatStrings("Calling: ", LLX_Tok);
  19. PrintDebug(msg);
  20. Print(msg);
  21. if MEM_ReadInt(
  22. // Tut mir wirklich leid dieses Chaos.. Ich hab nur leider keine
  23. // Ahnung wie man sonst die strings direkt pushen könnte?
  24. var int rtnVar;rtnVar = 0;
  25. var string argstr0; var string argstr1; var string argstr2; var string argstr3; var string argstr4; var string argstr5; var string argstr6; var string argstr7; var string argstr8;
  26. var int argint0; var int argint1; var int argint2; var int argint3; var int argint4; var int argint5; var int argint6; var int argint7; var int argint8;
  27. var int args; var int argcnt; var int argstrcnt; var int argintcnt; args = 0; argcnt = 0; argstrcnt = 0; argintcnt = 0;
  28. // Argumente einlesen
  29. var int i;
  30. var int pos; pos = MEM_StackPos.position;
  31. if(LLX_Next()) {
  32. chr = STR_GetCharAt(LLX_Tok, 0);
  33. if (chr==33) {
  34. rtnVar = 1;
  35. MEM_GetParserSymbol(STR_SubStr(LLX_Tok, 1, LLX_Len-2));
  36. };
  37. if((47<chr&&chr<58)||chr==34||(64<chr&&chr<91) {
  38. LLX_Tok = STR_SubStr(LLX_Tok, 1, STR_Len(LLX_Tok)-1);
  39. if(chr==83) {
  40. PrintDebug("SaveString");
  41. if(argstrcnt==0) { argstr0 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  42. if(argstrcnt==1) { argstr1 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  43. if(argstrcnt==2) { argstr2 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  44. if(argstrcnt==3) { argstr3 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  45. if(argstrcnt==4) { argstr4 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  46. if(argstrcnt==5) { argstr5 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  47. if(argstrcnt==6) { argstr6 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  48. if(argstrcnt==7) { argstr7 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  49. if(argstrcnt==8) { argstr8 = Str_SubStr(LLX_Tok, 1, LLX_Len-2); };
  50. argstrcnt += 1;
  51. args = (args<<1)+1;
  52. argcnt += 1;
  53. }
  54. else {
  55. PrintDebug("SaveInt");
  56. i = STR_ToInt(LLX_Tok);
  57. if(argintcnt==0) { argint0 = i; };
  58. if(argintcnt==1) { argint1 = i; };
  59. if(argintcnt==2) { argint2 = i; };
  60. if(argintcnt==3) { argint3 = i; };
  61. if(argintcnt==4) { argint4 = i; };
  62. if(argintcnt==5) { argint5 = i; };
  63. if(argintcnt==6) { argint6 = i; };
  64. if(argintcnt==7) { argint7 = i; };
  65. if(argintcnt==8) { argint8 = i; };
  66. argintcnt += 1;
  67. args = (args<<1)+0;
  68. argcnt += 1;
  69. };
  70. };
  71. MEM_StackPos.position = pos;
  72. };
  73. // Argumente umdrehen (freundlicher bei der Verwendung..)
  74. PrintDebug(IntToString(args));
  75. var int argsc; argsc = 0;
  76. i = 0;
  77. pos = MEM_StackPos.position;
  78. if(i < argcnt) {
  79. argsc += (args&1)<<(argcnt-1-i);
  80. args = args>>1;
  81. i += 1;
  82. MEM_StackPos.position = pos;
  83. };
  84. args = argsc;
  85. PrintDebug(IntToString(args));
  86. // Argumente pushen
  87. argstrcnt = 0; argintcnt = 0;
  88. var int argcurr;
  89. pos = MEM_StackPos.position;
  90. if(argcnt) {
  91. argcnt -= 1;
  92. argcurr = args&1;
  93. args = args>>1;
  94. if(argcurr) {
  95. if(argstrcnt==0) { MEM_PushStringParam(argstr0); };
  96. if(argstrcnt==1) { MEM_PushStringParam(argstr1); };
  97. if(argstrcnt==2) { MEM_PushStringParam(argstr2); };
  98. if(argstrcnt==3) { MEM_PushStringParam(argstr3); };
  99. if(argstrcnt==4) { MEM_PushStringParam(argstr4); };
  100. if(argstrcnt==5) { MEM_PushStringParam(argstr5); };
  101. if(argstrcnt==6) { MEM_PushStringParam(argstr6); };
  102. if(argstrcnt==7) { MEM_PushStringParam(argstr7); };
  103. if(argstrcnt==8) { MEM_PushStringParam(argstr8); };
  104. argstrcnt += 1;
  105. }
  106. else {
  107. if(argintcnt==0) { MEM_PushIntParam(argint0); };
  108. if(argintcnt==1) { MEM_PushIntParam(argint1); };
  109. if(argintcnt==2) { MEM_PushIntParam(argint2); };
  110. if(argintcnt==3) { MEM_PushIntParam(argint3); };
  111. if(argintcnt==4) { MEM_PushIntParam(argint4); };
  112. if(argintcnt==5) { MEM_PushIntParam(argint5); };
  113. if(argintcnt==6) { MEM_PushIntParam(argint6); };
  114. if(argintcnt==7) { MEM_PushIntParam(argint7); };
  115. if(argintcnt==8) { MEM_PushIntParam(argint8); };
  116. argintcnt += 1;
  117. };
  118. MEM_StackPos.position = pos;
  119. };
  120. MEM_CallByID(fnc);
  121. if
  122. if(ret!=-1) {
  123. if(ret) {
  124. if (rtnVar) {
  125. MEM_Assign();
  126. } else {
  127. Console_WriteLine(MEM_PopStringResult());
  128. }
  129. else {
  130. if (rtnVar) {
  131. MEM_Assign();
  132. } else {
  133. Print(IntToString(MEM_PopIntResult()));
  134. };
  135. };
  136. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement