     case 363:    // indexOf
      {
        char *Str = (LPSTR)(StringStore+Buda2[Arguments]);
        char *Target = (LPSTR)(StringStore+Buda2[Arguments+1]);
        DWORD from = Buda2[Arguments+2];
        DWORD Str_len = strlen(Str);
        DWORD Target_len = strlen(Target);

        if (Target_len==0)
          return(0);

        if (ch_set)
        {
          for(i=from; i <= Str_len-Target_len; i++)
          {
            if (Str[i] == Target[0])
            {
              for(j=1, k=i+1; Str[k]==Target[j] && Target[j]; k++, j++);
              if (j > Target_len)
              {
                Buda2[Return] = i;
                Buda1[Return]=TT_INT;
                return(1);
              }
            }
          }
        }
#if PROF==0
        else if (!(status_fl&512))
        {
          MitiText("Error: In the Light edition you cannot use indexOf with Unicode strings. Do this with another char set or with higher edition.\r\n", &cf_red);
          return(0);
        }
#endif
        else
        {
          for (i=t=0; t<from && i<Str_len; i++)
            if ((Str[i]&0xc0)!=0x80)
              t++;
          for( ; i <= Str_len-Target_len; i++)
          {
            if (Str[i] == Target[0])
            {
              for(j=1, k=i+1; Str[k]==Target[j] && Target[j]; k++, j++);
              if (j > Target_len)
              {
                Buda2[Return] = t;
                Buda1[Return]=TT_INT;
                return(1);
              }
            }
            if ((Str[i]&0xc0)!=0x80)
              t++;
          }
        }
        return(0);
      }
     case 365:    // ignIndexOf
      {
        char *Str = (LPSTR)(StringStore+Buda2[Arguments]);
        char *Target = (LPSTR)(StringStore+Buda2[Arguments+1]);
        DWORD from = Buda2[Arguments+2];
        DWORD Str_len = strlen(Str);
        DWORD Target_len = strlen(Target);

        if (Target_len==0)
          return(0);

        for(i = from; i <= Str_len-Target_len; i++)
        {
          if (Str[i] == Target[0] || ((Str[i]<Target[0])
                ?(Str[i]+32==Target[0] && Str[i] >= 'A' && Str[i] <= 'Z')
                :(Str[i]-32==Target[0] && Str[i] >= 'a' && Str[i] <= 'z')))
          {
            k = i+1;
            j = 1;
            while(1) {
              if (Str[k] == Target[j] || ((Str[k]<Target[0])
                  ?(Str[k]+32==Target[j] && Str[k] >= 'A' && Str[k] <= 'Z')
                  :(Str[k]-32==Target[j] && Str[k] >= 'a' && Str[k] <= 'z')))
              {
                k++;
                j++;
                continue;
              }
              else
              {
                j++;
                break;
              }
            }
            if (j > Target_len)
            {
              Buda2[Return] = i;
              Buda1[Return]=TT_INT;
              return(1);
            }
          }
        }
        return(0);
      }
    case 366:    // lastIndexOf
      {
        char *Str = (LPSTR)(StringStore+Buda2[Arguments]);
        char *Target = (LPSTR)(StringStore+Buda2[Arguments+1]);
        DWORD from = Buda2[Arguments+2];
        DWORD Str_len = strlen(Str);
        DWORD Target_len = strlen(Target);
        int index = -1;

        if (Target_len==0)
          return(0);

        for(i = from; i <= Str_len-Target_len; i++)
        {
          if (Str[i] == Target[0])
          {
            for(j=1, k=i+1; Str[k]==Target[j] && Target[j]; k++, j++);
            if (j > Target_len)
              index = i;
          }
        }
        if (index == -1)
          return(0);
        Buda2[Return] = index;
        Buda1[Return]=TT_INT;
        return(1);
      }
    case 364:    // subString
      {
        char *Str = (LPSTR)(StringStore+Buda2[Arguments]);
        DWORD from = Buda2[Arguments+1];
        DWORD to = Buda2[Arguments+2];
        DWORD Str_len = strlen(Str);
#if PROF==0
        if (ch_set==0 && !(status_fl&512))
        {
          MitiText("Error: In the Light edition you cannot use indexOf with Unicode strings. Do this with another char set or with higher edition.\r\n", &cf_red);
          return(0);
        }
#endif
        if (ch_set==0)
        {
          DWORD from2, to2;
          
          if (to < from || Str_len < to)
            return(0);
            
          for (i=from2=0; from2<from && i<Str_len; i++)
            if ((Str[i]&0xc0)!=0x80)
              from2++;
          from=i;
          for (to2=from; to2<to && i<Str_len; i++)
            if ((Str[i]&0xc0)!=0x80)
              to2++;
          to=i;
        }
        
        if (to < from || Str_len < to)
          return(0);

        Buda1[Return]=TT_STR;
        if (to==Str_len) // makes easy the end
        {
          Buda2[Return]=Buda2[Arguments]+from;
          return(1);
        }
        Buda2[Return] = i = sv_StStore;
        if ((sv_StStore+=to - from + 1)>=STRING_STORE)
        {
          if (correct_STR_ST())
            goto FULL;
          Str = (LPSTR)(StringStore+Buda2[Arguments]);
        }
        for(j = from; j < to; StringStore[i++] = Str[j++]);
        StringStore[i] = 0;
        return(1);
      }
     case 377:        // print_file      in output
     case 378:        // print_string    in output
     case 379:        // print_file      in string
     case 380:        // print_string    in string
      {
        NOT_FOR_LIGHT
#if CONSOLE
        int pf_file;
#else
        CFile pf_file;
#endif
        int pf_end, absolute, varinat_fl= -1, repl_mode= -1, k_f, k_a, m_f, m_a;
        char type_ch, AndOr_ch;
        DWORD *Temp=(LPDWORD)ObjectStore[Buda2[Arguments]+4], And[AND_OR], Or[AND_OR];
        for (i=0; i<AND_OR; And[i]=0, Or[i]=0, i++);
        if (ObjectStore[Buda2[Arguments]+2]==0) // no arguments
        {
          MitiText("Runtime Error: The predicate \"print_file\" needs at least one argument.\r\n", &cf_red);
          return(0);
        }
        if (p_line&1) // print file
        {
#if CONSOLE
          if ((pf_file=open((LPSTR)(StringStore+Temp[0]), O_RDONLY | O_TEXT))==-1)
          {
            printf("\r\nUnable to open the file:\r\n");
            printf("%s",(LPSTR)(StringStore+Temp[0]));  printf("\r\n");
            return(0);
          }
          lseek(pf_file,0,SEEK_SET);
          pf_end=read(pf_file, string2, L_BUFER)-2;
#else
          if (pf_file.Open(make_long(StringStore+Temp[0]), CFile::modeRead)==0)
          {
            MitiText("Runtime Error: ", &cf_red);
            MitiText("Unable to open the file:\r\n");
            MitiText((LPSTR)(StringStore+Temp[0]));  MitiText("\r\n");
            return(0);
          }
          pf_file.SeekToBegin();
          pf_end=pf_file.Read(string2, L_BUFER)-2;
#endif // CONSOLE
        }
        else // print string
        {
          for (absolute=0; absolute<L_BUFER && StringStore[Temp[0]+absolute]; absolute++)
            string2[absolute]=StringStore[Temp[0]+absolute];
          pf_end=absolute-2;
        }
        if (p_line>378)
        {
          Buda1[Return]=TT_STR;
          Buda2[Return]=sv_StStore;
        }
pf_e:   t=0;
        string2[pf_end+2]='>';
        for (i=0; ((int)i)<pf_end; i++)
        {
          if (repl_mode!= -1 && varinat_fl== -1 && StringStore[Temp[repl_mode]]==string2[i])
          {
            for (p=1, j=i+1; StringStore[Temp[repl_mode]+p]==string2[j] && ((int)j)<pf_end+2; p++, j++);
            if (StringStore[Temp[repl_mode]+p]==0 || j==pf_end+2)
            {
              string2[i]=0;
              MitiText2(string2+t, p_line>378);
              if (j==pf_end+2)
              {
                if (p_line&1) // print file
#if CONSOLE
                  pf_end=read(pf_file, string2+p, L_BUFER-p)+p-2;
#else
                  pf_end=pf_file.Read(string2+p, L_BUFER-p)+p-2;
#endif // CONSOLE
                else // print string
                {
                  for (pf_end=p; pf_end<L_BUFER && StringStore[Temp[0]+absolute]; )
                    string2[pf_end++] = StringStore[Temp[0] + absolute++];
                  pf_end-=2;
                }
                string2[pf_end+2]='>';
                string2[pf_end+3]=0;
                for ( m=p; StringStore[Temp[repl_mode]+p]==string2[p] && ((int)p)<pf_end+2; p++);
                if (StringStore[Temp[repl_mode]+p]!=0)
                  for (t=i=j=0; j<m; string2[j]=StringStore[Temp[repl_mode]+j], j++);
                else
                {
                  t=i=p;
                  goto pr_file;
                }
              }  
              else
              {
                t=i=j;
pr_file:        MitiText2((LPSTR)(StringStore+Temp[repl_mode+1]), p_line>378);
              }
              i--;
            }
          }
          if (string2[i]=='<' && string2[i+2]==':'
           && (string2[i+1]=='v'|| string2[i+1]=='n'|| string2[i+1]=='l'|| string2[i+1]=='b'|| string2[i+1]=='o'
           || (varinat_fl== -1 && (string2[i+1]=='i' || string2[i+1]=='r' || string2[i+1]=='t'))))
          {
            type_ch=string2[i+1];
            if (varinat_fl== -1)
            {
              string2[i]=0;
              MitiText2(string2+t, p_line>378);
            }
            if (type_ch=='t') // left tag
            {
              MitiText2("<", p_line>378);
              t=1+(i+=2);
              continue;
            }
            for (k=0, j=i+3; string2[j]>='0' && string2[j]<='9'; j++)
              k=10*k+(string2[j]-'0');
            m=j;
            if (type_ch!='i' && type_ch!='r') // v, n, l, b, o
            {
              if (string2[j]!=':')
                p=M1;
              else if (type_ch=='o')
              {
                if ((AndOr_ch=string2[p= ++j])!='>')
                  j++;
              }
              else if (k<ObjectStore[Buda2[Arguments]+2])
              {
                if (type_ch>'l') // v, n
                  for (j++, p=0; StringStore[Temp[k]+p]==string2[j] && ((int)j)<pf_end+2; j++, p++);
                else  // l, b
                {
                  if (string2[++j]=='-')
                  {
                    m_f= -1;
                    j++;
                  }
                  else  
                    m_f=1;
                  for (k_f=0; string2[j]>='0' && string2[j]<='9'; j++)
                    k_f=10*k_f+(string2[j]-'0');
                  p=j;
                }  
              }
              else
                p=M2;
            }
            for ( ; string2[j]!='>'; j++);
            if (j==pf_end+2)
            {
              if (p_line&1) // print file
#if CONSOLE
                pf_end=read(pf_file, string2, L_BUFER)-2;
#else
                pf_end=pf_file.Read(string2, L_BUFER)-2;
#endif
              else // print string
              {
                for (pf_end=0; pf_end<L_BUFER && StringStore[Temp[0]+absolute]; )
                  string2[pf_end++] = StringStore[Temp[0] + absolute++];
                pf_end-=2;
              }
              string2[pf_end+2]='>';
              string2[pf_end+3]=0;
              if (m==j)
              {
                j=0;
                for (; string2[j]>='0' && string2[j]<='9'; j++)
                  k=10*k+(string2[j]-'0');
                if (type_ch!='i' && type_ch!='r') // v, n, l, b, o
                {
                  if (string2[m=j]!=':')
                    p=M1;
                  else if (type_ch=='o')
                    AndOr_ch=string2[p= ++j];
                  else if (k<ObjectStore[Buda2[Arguments]+2])
                  {
                    if (type_ch>'l') // v, n
                      for (j++, p=0; StringStore[Temp[k]+p]==string2[j]; j++, p++);
                    else  // l, b
                    {
                      if (string2[++j]=='-')
                      {
                        m_f= -1;
                        j++;
                      }
                      else  
                        m_f=1;
                      for (k_f=0; string2[j]>='0' && string2[j]<='9'; j++)
                        k_f=10*k_f+(string2[j]-'0');
                      p=j;
                    }
                  }    
                  else
                  {
                    p=M2;
                    j++;
                  }
                }
              }
              else if (type_ch=='o' && m+1==j)
                AndOr_ch=string2[j=0];
              else if ((type_ch=='v' || type_ch=='n') && m+p+1==j)
                for (j=0, m=0-p-1; StringStore[Temp[k]+p]==string2[j]; j++, p++);
              else if ((type_ch=='l' || type_ch=='b') && p==j)
              {
                if (m+1==j)
                {
                  if (string2[0]=='-')
                  {
                    j=1;
                    m_f= -1;
                  }
                  else
                  {  
                    j=0;
                    m_f=1;
                  }
                }
                else
                  j=0;
                for (; string2[j]>='0' && string2[j]<='9'; j++)
                  k_f=10*k_f+(string2[j]-'0');
              }      
              else
                j=0;
              for ( ; string2[j]!='>'; j++);
            }
            t=1+(i=j);
            if (k+(type_ch=='r')>=ObjectStore[Buda2[Arguments]+2] && (type_ch=='i' || type_ch=='r'))
              MitiText2("#error#", p_line>378);
            else if (type_ch=='i')
              MitiText2((LPSTR)(StringStore+Temp[k]), p_line>378);
            else if (type_ch=='r')
              repl_mode=(repl_mode == -1)?k:-1;
            else if (varinat_fl== -1 || varinat_fl==k) // type_ch== v, n, b, l, o
            {
              if (p==M1)
              {
                varinat_fl= -1;
                if (k<32*AND_OR)
                {
                  p= ~(1<<(k%32));
                  And[k/32]&=p;
                  Or[k/32]&=p;
                }
              }
              else if (type_ch=='o')
              {
                p= 1<<(k%32);
                if (k>=32*AND_OR)
                  p=0;
                else if (AndOr_ch=='o' || AndOr_ch=='d')
                  p=Or[k/32]&p;
                else
                  p=And[k/32]&p;
                if (AndOr_ch=='d' || AndOr_ch=='a')
                  varinat_fl=(p==0)?-1:k;
                else
                  varinat_fl=(p!=0)?-1:k;
              }
              else
              {
                if (p==M2)
                  varinat_fl=k;
                else if (type_ch=='v')
                  varinat_fl=(m+p+1==j && StringStore[Temp[k]+p]==0)?-1:k;
                else if (type_ch=='n')
                  varinat_fl=(m+p+1!=j || StringStore[Temp[k]+p]!=0)?-1:k;
                else
                {
                  p=0;
                  if (StringStore[Temp[k]]=='-')
                  {
                    m_a= -1;
                    p++;
                  }
                  else  
                    m_a=1;
                  for (k_a=0; StringStore[Temp[k]+p]>='0' && StringStore[Temp[k]+p]<='9'; p++)
                    k_a=10*k_a+(StringStore[Temp[k]+p]-'0');
                  if (type_ch=='l')
                    varinat_fl=(m_a*k_a<m_f*k_f)?-1:k;
                  else
                    varinat_fl=(m_a*k_a>m_f*k_f)?-1:k;
                }
                if (k<32*AND_OR)
                {
                  p= 1<<(k%32);
                  if (varinat_fl==k)
                    And[k/32]|=p;
                  else
                    Or[k/32]|=p;
                }
              }
            }  
          }  
        }
        if (pf_end+2==L_BUFER)
        {
          if (string2[pf_end]=='<')
            i=2;
          else if (string2[pf_end+1]=='<')
            i=1;
          else
            i=0;
          string2[pf_end+2-i]=0;
          if (varinat_fl== -1)
            MitiText2(string2+t, p_line>378);
          string2[0]='<'; string2[1]=string2[pf_end+1]; 
          if (p_line&1) // print file
#if CONSOLE
            pf_end=read(pf_file, string2+i, L_BUFER-i)+i-2;
#else
            pf_end=pf_file.Read(string2+i, L_BUFER-i)+i-2;
#endif
          else // print string
          {
            for (pf_end=i; pf_end<L_BUFER && StringStore[Temp[0]+absolute]; )
              string2[pf_end++] = StringStore[Temp[0] + absolute++];
            pf_end-=2;
          }
          goto pf_e;
        }
        string2[pf_end+2]=0;
        if (varinat_fl== -1)
          MitiText2(string2+t, p_line>378);
        if (p_line&1) // print file
#if CONSOLE
          close(pf_file);
#else
          pf_file.Close();
#endif
        if (p_line>378)
          StringStore[sv_StStore++]=0;
        if (ObjectStore[Buda2[Arguments]+6]&HALF) // free the list
        {
          DWORD old;
          if ((old=i=j=the_free_list)!=M1)
            for ( ; ObjectStore[i+3]<ObjectStore[Buda2[Arguments]+3] && (j=ObjectStore[i+6])!=M1; old=i, i=j);
          if (the_free_list==j)
            the_free_list=Buda2[Arguments];
          else
            ObjectStore[old+6]=Buda2[Arguments];
          //ObjectStore[Buda2[Arguments]]=CLASS_FREE_LIST;
          ObjectStore[Buda2[Arguments]+6]=j;
        }
      }
      return(1);
     case 401: // print_file2
      {
        NOT_FOR_LIGHT
        char *FileName=(LPSTR)(StringStore+Buda2[Arguments]);

        FILE *fp = fopen(FileName, "r");
        if (fp == NULL)
          return(0);

        char c;
        while(1)
        {
          c = fgetc(fp);
          if (feof(fp))
            break;
          fprintf(stdout, "%c", c);
        }
        fclose(fp);
        return(1);
      }
     case 404: // get_file_size
      {
        NOT_FOR_LIGHT
        char *file=(LPSTR)(StringStore+Buda2[Arguments]);

        struct stat buffer;
        stat(file, &buffer);
        Buda1[Return]=TT_INT;
        Buda2[Return]=(DWORD)buffer.st_size;
        return(1);
      }

#if !CONSOLE
     case 162:        // open_DLL  Vasko
      ObjectStore[ObjectStore_br]=CLASS_SYSTEM_DLL; // Type
      ObjectStore[ObjectStore_br+1]=M1;  // object name
      ObjectStore[ObjectStore_br+2]=
           (DWORD)AfxLoadLibrary(make_long(StringStore+Buda2[Arguments]));
      if (ObjectStore[ObjectStore_br+2]==0)
      {
        // handle the error
        DWORD theerr = GetLastError();
        sprintf(string2, "Runtime Error\r\nCannot open DLL file \"%s\".\r\n",
            (LPSTR)StringStore+Buda2[Arguments]);
        MitiText(string2, &cf_red);
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,theerr,0,string3,L_BUFER,NULL);
        MitiText(make_utf8(string3));
        return(0);
      }
      Buda1[Return]=TT_OBJ;
      Buda2[Return]=ObjectStore_br;
      if ((ObjectStore_br+=3)>=OBJ_STORE && correct_OBJ_ST() )
        goto FULL2;
      return(1);
     case 212:        // server
     {
      ObjectStore[ObjectStore_br]=CLASS_SYSTEM_ActiveX; // Type
      ObjectStore[ObjectStore_br+1]=M1;  // object name
      
      Buda1[Return]=TT_OBJ;
      Buda2[Return]=ObjectStore_br;
      if (open_server(Arguments)==0)
        return(0);
      if (Buda1[Arguments+1]==TT_LINK)
        ObjectStore[ObjectStore_br+3]=Definition[DF_FALSE];
      else
      {
	      oComEvtClient.AttachEvents(ObjectStore_br,((COleDispatchDriver*)ObjectStore[ObjectStore_br+7])->m_lpDispatch); // attach events
	      ObjectStore[ObjectStore_br+3]=Buda1[Arguments+1];// ms_function;
      }
      if (Buda1[Arguments+2]==TT_STR)
        ObjectStore[ObjectStore_br+8]=Buda2[Arguments+2];// Connection Point
      if ((ObjectStore_br+=9)>=OBJ_STORE && correct_OBJ_ST() )
        goto FULL2;
      return(1);
     } 
	   case 385: //raise_event - plamen
	   {
		  DWORD arg1, arg2, arg3;
		  COleVariant ov1, ov2, ov3, ov_ret;
		  arg1=(Buda1[Arguments]==TT_LINK)?Buda2[Arguments]:Arguments;
		  arg2=(Buda1[Arguments+1]==TT_LINK)?Buda2[Arguments+1]:(Arguments+1);
		  arg3=(Buda1[Arguments+2]==TT_LINK)?Buda2[Arguments+2]:(Arguments+2);
		  SetVariant(arg1, &ov1);
		  SetVariant(arg2, &ov2);
		  SetVariant(arg3, &ov3);
		  if(CStrawberrySvr::m_obj)
		    ov_ret = CStrawberrySvr::m_obj->Fire_RaiseTheEvent(ov1,ov2,ov3);
		  else
		  {
		    MitiText("You can rise event to the clients only when you have clients which called this program as a server.\r\n", &cf_red);
		    return(0);
		  }
		  //GetVariant(arg1, &ov1);
		  //GetVariant(arg2, &ov2);
		  //GetVariant(arg3, &ov3);
      if (Return!=M1)
      {
		    GetVariant(Return, &ov_ret);
      }		
		  return(1);
	   }
     case 213:        // call method
      if (SUBTYPE(ObjectStore[Buda2[Arguments]],CLASS_SYSTEM_ActiveX) || SUBTYPE(ObjectStore[Buda2[Arguments]],C_S_WIN_Embedded))
      {
        if (Buda1[Arguments+1]!=TT_OBJ) // this is a property
        {
          if (Buda2[Return]) // TP_IO
          {
            DWORD PropertyN;
            if (Buda1[Arguments+1]==TT_STR)
              PropertyN=Buda2[Arguments+1];
            else
            {
              len=0;
              write_p( TT_VAR, 6, Arguments+1);
              PropertyN=sv_StStore; // len>0
              strcpy((LPSTR)(StringStore+sv_StStore), (LPSTR)string2);
              if ((sv_StStore+=len+1)>=STRING_STORE && correct_STR_ST() )
                goto FULL;
            }
#if TR
            sprintf(string2, "property io: %s\r\n", StringStore+PropertyN);
            MitiText(string2);
#endif
            if (the_free_container!=M1)
            {
              i=the_free_container;
              the_free_container=ObjectStore[the_free_container+6];
            }
            else
            {
              i=ObjectStore_br;
              ObjectStore[ObjectStore_br]=CLASS_SYSTEM_CONTAINER;
              if ((ObjectStore_br+=8)>=OBJ_STORE && correct_OBJ_ST() )
                goto FULL2;
            }
            Buda1[Return]=TT_OBJ;
            Buda2[Return]=i;
            ObjectStore[i+1]=M1;  // object name
            ObjectStore[i+2]=M1; // System Name
            ObjectStore[i+3]=M1; // Name
            ObjectStore[i+4]=HALF | QUARTER | OBSEG1 | 12; // MS type variant (output array)
            ObjectStore[i+5]=M1;
            ObjectStore[i+6]=PropertyN; // property
            ObjectStore[i+7]=Buda2[Arguments];   // server
            return(1);
          }
          else  // Angele, getni tuk edno properti
          {
            i=GetProperty(Buda2[Arguments], Arguments+1, Return);
            return(i);
          }
        }  // Angele, vikni tuk edin method
        i=CallMethod(Buda2[Arguments], Arguments+1, Return);
        return(i);
        
      }
      else if (SUBTYPE(ObjectStore[Buda2[Arguments]],CLASS_SYSTEM_DLL)) // Call DLL function, Vasko
      {
        if (Buda1[Arguments+1]!=TT_OBJ) //list of arg is OK
        {  
          MitiText("Runtime error when try to call DLL function.\r\n", &cf_red);
          return (0);
        }
        CHECK_TYPE(1,CLASS_SYSTEM_LIST)

        DWORD *Temp=(LPDWORD)ObjectStore[Buda2[Arguments+1]+4];

        HINSTANCE h_mydll=(HINSTANCE)ObjectStore[Buda2[Arguments]+2]; // DLL library
        FARPROC lpf_Myfunc=GetProcAddress(h_mydll, (LPSTR)StringStore+Temp[2]);
        DWORD nRetCode;
        DWORD argcount=ObjectStore[Buda2[Arguments+1]+2]/4-1;
        LPDWORD theargs=(LPDWORD)b;

        if (lpf_Myfunc==0)
        {
          // handle the error
          DWORD theerr = GetLastError();
          sprintf(string2, "Runtime Error\r\nCannot find DLL function \"%s\".\r\n",
              (LPSTR)StringStore+Temp[2]);
          MitiText(string2, &cf_red);
          FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL,theerr,0,string3,L_BUFER,NULL);
          MitiText(make_utf8(string3));
          return(0);
        }
        for (i=4, j=0; j<argcount; i+=4, j++)
        {
          if (Temp[i+1]&TP_STR)
            b[j]=(DWORD)(StringStore+Temp[i+2]);
          else if (Temp[i+1]&(TP_INT|TP_FLOAT))
            b[j]=Temp[i+2];
          else
          {
            sprintf(string2, "Runtime Error\r\nThe argument %d in DLL function \"%s\" is %s.\r\n",
              j+1, (LPSTR)StringStore+Temp[2], (Temp[i+1]&TP_VAR)?"free variable":"object");
            MitiText(string2, &cf_red);
            return(0);
          }
        }

        __asm { //towa e cikul, koito push-wa elementite na b w stek-a
            mov ecx,[argcount]
        cycle:
            dec ecx
            cmp ecx,0
            jl enough
            mov eax,[theargs] 
            mov edx,[eax+ecx*4] //niakoi ot elementite na b
            push edx
            jmp cycle
        enough:
        }

        // call the function
        __asm call lpf_Myfunc
        __asm mov [nRetCode],eax  //this is the result ... what if it is an address ?:(

        /*parametrite triabwa da se pochistiat ot stek-a ?
         stdcall funkciite niamat nujda ot towa - 
         te sami se grijat da gi pochistiat*/
        /*
        argcount *=4;
        _asm ADD esp,argcount
        */

        if (Return!=M1)
        {
          Buda1[Return]=TT_INT; // type int
          Buda2[Return]=nRetCode;
        }
        return(1);
      }
      error_func3(Arguments,p_line,0,CLASS_SYSTEM_ActiveX,CLASS_SYSTEM_DLL);
      return(0);
#endif  // !CONSOLE
