Dim dc, mycol, imcol, MatLab, ver
Set MatLab=Nothing

mycol = array("maroon","saddlebrown","sienna","darkgoldenrod","tan","sandybrown","darksalmon","peru","chocolate","indianred","brown","firebrick")
imcol = ubound(mycol)
dc = imcol

sub LoadMatLab() ' Загружает MATLAB
  Dim MyRes, MyArray, Ub
  Set MatLab = CreateObject("Matlab.Application") ' Создали объект Matlab
  if MatLab is Nothing then
    alert "Невозможно подключить MATLAB"
    exit sub ' если нет Matlab - выходим
  end if
  MyRes = MatLab.Execute("version(" & Chr(39)& "-release" & Chr(39) & ")") ' MATLAB release
  MyArray = Split(MyRes, "=", -1, 1)
  Ub = UBound(MyArray)
  ver = CByte(MyArray(Ub)) ' MATLAB release
end sub

sub SetHeight(MyInp) ' Устанавливает число рядков области ввода
  Dim ArrOfStr, CountRows
  ArrOfStr = Split(MyInp.Value, vbCr, -1, 1) ' Перевели строку ввода в массив
  CountRows = Ubound(ArrOfStr)+1 ' Нашли нужное число рядков
  if CountRows>1 then
    MyInp.rows = CountRows ' Установили нужное число рядков
  end if
end sub

sub MyCalc(MyNum) ' Вызывает основную процедуру
  Dim MyInp, MyOut, S
  MyInp = "Inp" & Cstr(MyNum)
  MyOut = "Out" & Cstr(MyNum)
  S = "call CalcMatLab(" & MyInp & "," & MyOut & ")"
  execute S
end sub

'===Основная процедура. Она берёт данные из MyInp, считает в MATLABе и возвращает в MyOut.
sub CalcMatLab(MyInp,MyOut)
  Dim MyValue, MyRes, MyOutRes, MyArray, CountFig, iFig, Ub, ib, MyInpFile, MyOutFile, MyCom, MyFileName
  '===Проверяем, есть ли MATLAB. Если нет, то выходим из процедуры.=========================
  if MatLab is Nothing then
    alert "MATLAB не подключен - счёт невозможен"
    exit sub ' если нет Matlab - выходим
  end if
  '===Начинаем текстовый вывод.==========
  if ver>=13 then
    MyRes=MatLab.Execute(MyInp.Value) ' выполнили команды
    MyOut.innerHTML = "<pre>" & MyRes & "</pre>" ' Осуществляем текстовый вывод
  else
    MyValue = MyInp.Value ' все символы области ввода
    Ub = len(MyValue) ' число символов в области ввода
    MyCom=""
    for ib=1 to Ub ' берём каждый символ области ввода
      MyCom = MyCom & ChrW(Asc(Mid(MyValue,ib,1))) ' преобразовываем каждый символ в слово
    next
    MyRes=MatLab.Execute(MyCom) ' выполнили команды
    Ub = len(MyRes) ' число символов для области вывода
    MyOutRes = "" ' будем преобразовывать
    for ib=1 to Ub ' каждый символ
      MyOutRes = MyOutRes & Chr(AscB(Mid(MyRes,ib,1))) ' преобразовали очередной символ в байт
    next
    MyOut.innerHTML = "<pre>" & MyOutRes & "</pre>" ' Осуществляем текстовый вывод
  end if
  '===Закончили текстовый вывод. Начинаем вывод графических результатов.==
  MatLab.Execute("findobj;") ' все графические объекты
  MyRes = MatLab.Execute("max(ans(find(ans==fix(ans))))") ' наибольшее целое - число графических объектов
  MyArray = split(MyRes,"=",-1,1) ' разделяем строку по знаку равенства
  CountFig = CInt(MyArray(1)) ' число после знака = количество созданных графических объектов
  if CountFig>0 then ' есть фигуры
    MyOutFile = "C:\" & MyOut.id & "_"
    for iFig=1 to CountFig ' записываем каждую фигуру в нужный файл и читаем его в документ
      MyFileName = MyOutFile & Cstr(iFig) & ".emf" ' имя файла фигуры
      MyCom = "print -dmeta " & chr(39) & MyFileName & chr(39) & " -f" & Cstr(iFig) ' команда печати фигуры в файл
      MatLab.Execute(MyCom) ' печатаем фигуру в файл
      MyOut.innerHTML = MyOut.innerHTML & "<center><img border=1 src=""" & MyFileName & """></img></center>"  & "<br>" ' добавили
      if iFig<CountFig then
        MyOut.innerHTML = MyOut.innerHTML & "<br>" ' между фигурами - пропуск строки
      end if
    next
    for iFig=1 to CountFig ' записываем каждую фигуру в нужный файл и читаем его в документ
      MyFileName = MyOutFile & Cstr(iFig) & ".emf" ' имя файла фигуры
      MyCom = "delete(" & Cstr(iFig) & ")" ' команда удаления окна фигуры
      MatLab.Execute(MyCom) ' удаляем фигуру
      MyCom = "delete " & MyFileName ' команда удаления файла
      MatLab.Execute(MyCom) ' удаляем файл
    next
  end if    
end sub

sub ChangeColor(MyObj)
  Dim h2str, lh2, mys, ks, kc
  dc = dc-1
  if dc < 0 then
    dc = imcol
  end if
  h2str = MyObj.innertext ' содержимое тэга
  lh2 = len(h2str) ' длина текста
  mys = "" ' начинаем с пустой строки
  kc = dc
  for ks = 1 to lh2
    kc = kc+1
    if kc > imcol then
      kc = 0
    end if
    mys = mys & "<font color=" & mycol(kc) & ">" & mid(h2str,ks,1) & "</font>"
  next
  MyObj.innerhtml = mys
end sub

sub CalcInp(MyInp)
  Set MatLab = CreateObject("Matlab.Application") ' Создали объект Matlab
  if MatLab is Nothing then
    alert "Невозможно подключить MATLAB"
    exit sub ' если нет Matlab - выходим
  end if
  MatLab.Execute(MyInp.Value)
end sub

sub MyInit()
  Dim lentag, k, tn, idh, lib, ds
  lentag = document.all.length ' количество тэгов
  for k=0 to lentag-1
    tn = lcase(document.all(k).tagname)
    idh = document.all(k).id
    if tn="h1" then
      call setInterval("call ChangeColor(document.all." & idh & ")",200)
    end if
  next
end sub
